需要的组件:
SKIT.FlurlHttpClient.Wechat.TenpayV3
代码示例
csharp
using SKIT.FlurlHttpClient.Wechat.TenpayV3;
using SKIT.FlurlHttpClient.Wechat.TenpayV3.Settings;
namespace MyWxPay.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TenPayApiV3Controller : ControllerBase
{
[HttpGet("CreateOrder")]
public async Task<IActionResult> CreateOrder()
{
var options = new WechatTenpayClientOptions()
{
MerchantId = "微信商户号",
MerchantV3Secret = "微信商户 v3 API 密钥",
MerchantCertificateSerialNumber = "微信商户证书序列号",
MerchantCertificatePrivateKey = System.IO.File.ReadAllText("/微信商户证书私钥文件路径/apiclient_key.pem"),
PlatformAuthScheme = PlatformAuthScheme.PublicKey,
PlatformPublicKeyManager = new InMemoryPublicKeyManager()
};
var client = WechatTenpayClientBuilder.Create(options).Build();
var openId = "下单的人的微信OpenId";
var request = new CreatePayTransactionJsapiRequest()
{
OutTradeNumber = "设置订单号,一般是传入自己内部系统的订单号",
AppId = "微信小程序的Appid",
Description = "测试商品",
NotifyUrl = "写的支付成功的回调地址,必须是https",
Amount = new CreatePayTransactionJsapiRequest.Types.Amount() { Total = 设置金额 注意单位是分 },
Payer = new CreatePayTransactionJsapiRequest.Types.Payer() { OpenId = openId }
};
var response = await client.ExecuteCreatePayTransactionJsapiAsync(request);
if (response.IsSuccessful())
{
Console.WriteLine("PrepayId:" + response.PrepayId);
List<IDictionary<string, string>> keyValuePairs = new List<IDictionary<string, string>>();
//传入小程序的appid及微信返回的预支付ID获取想要返回给前端的数据
var paramMap = client.GenerateParametersForJsapiPayRequest(request.AppId, response.PrepayId);
keyValuePairs.Add(paramMap);
IDictionary<string, string> orderdic = new Dictionary<string, string> { { "orderid", "request.OutTradeNumber" } };
keyValuePairs.Add(orderdic);
return Ok(keyValuePairs);
}
else
{
return BadRequest(response.ErrorMessage);
}
}
}