C# 微信支付之JSAPI支付
微信支付之JSAPI支付
前言----
微信支付是微信公众平台提供的一种在线支付服务,它支持多种支付方式,包括APP支付、JSAPI支付等。在前面的文章中,我们已经介绍了微信支付的APP支付,这篇文章将详细描述JSAPI支付。
什么是JSAPI支付
JSAPI支付是一种在微信浏览器内使用的支付方式,它主要用于公众号里面的H5应用的支付。与APP支付不同,JSAPI支付不需要用户下载和安装任何APP,只要在微信浏览器中打开相关页面,就可以进行支付。
开发前的准备
1. 微信公众平台:首先,你需要在微信公众平台上创建一个账号,并且绑定一个商户ID。商户ID是用于接收支付结果的唯一标识。
2. 微信浏览器:JSAPI支付只能在微信浏览器中使用,因此你需要确保用户使用的是微信浏览器。
3. H5应用:JSAPI支付主要用于公众号里面的H5应用的支付。因此,你需要先创建一个H5应用,并且将其绑定到你的微信公众平台账号上。
JSAPI支付流程
1. 生成预付单:首先,用户在微信浏览器中打开相关页面,点击支付按钮后,系统会生成一个预付单。
2. 获取预付单信息:系统会将预付单的信息传递给你的服务器端程序。这个信息包括订单号、金额等。
3. 向微信支付API发起请求:接收到预付单信息后,你需要向微信支付API发起一个请求,用于确认支付。
4. 微信支付API处理请求:微信支付API会处理你的请求,并且返回一个结果。这个结果包括支付是否成功等信息。
5. 更新订单状态:如果支付成功,系统会将订单状态更新为已付款。
JSAPI支付接口
以下是JSAPI支付的主要接口:
* ` ` System;
using System.Net.Http;
using System.Text.Json;
using Microsoft.Extensions.Configuration;
namespace WeChatPayJsApi{
public class Program {
private readonly IConfiguration _configuration;
public Program(IConfiguration configuration)
{
_configuration = configuration;
}
public async Task Main(string[] args)
{
//生成预付单 var prepayId = await GeneratePrepayIdAsync();
// 向微信支付API发起请求 var result = await ConfirmPayAsync(prepayId);
// 更新订单状态 if (result.IsSuccess())
{
Console.WriteLine("支付成功!");
}
else {
Console.WriteLine("支付失败!");
}
}
private async Task
{
var = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, " {
Content = new StringContent(JsonSerializer.Serialize(new {
appid = _configuration["WeChat:AppId"],
mch_id = _configuration["WeChat:MchId"],
nonce_str = Guid.NewGuid().ToString(),
body = "测试支付",
out_trade_no = Guid.NewGuid().ToString(),
total_fee =1,
spbill_create_ip = "192.168.1.100"
}), Encoding.UTF8, "application/json")
};
var response = await if (response.IsSuccessStatusCode)
{
return await response.Content.ReadAsStringAsync();
}
else {
throw new Exception($"生成预付单失败!");
}
}
private async Task
{
var = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, " {
Content = new StringContent(JsonSerializer.Serialize(new {
appid = _configuration["WeChat:AppId"],
mch_id = _configuration["WeChat:MchId"],
nonce_str = Guid.NewGuid().ToString(),
transaction_id = prepayId,
out_trade_no = Guid.NewGuid().ToString()
}), Encoding.UTF8, "application/json")
};
var response = await if (response.IsSuccessStatusCode)
{
return JsonSerializer.Deserialize
}
else {
throw new Exception($"确认支付失败!");
}
}
private class PayResult {
public bool IsSuccess() => true;
}
}
}
```
以上是使用C语言进行JSAPI支付的示例代码。