主要修改点说明:
接口升级:
csharp
复制
// 原v2接口
var url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
// 新v3接口
var url = "https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi";
签名方式升级:
csharp
复制
// 原MD5签名
private string GenerateSign(SortedDictionary<string, string> parameters, string apiKey)
// 新RSA签名
private string SignWithPrivateKey(string message)
数据格式升级:
csharp
复制
// 原XML格式
var xml = ToXml(parameters);
// 新JSON格式
var requestBody = new { ... };
var bodyStr = JsonConvert.SerializeObject(body);
证书使用方式:
csharp
复制
// 必须使用p12证书文件
var cert = new X509Certificate2("证书路径.p12", mchId);
请求头变化:
csharp
复制
// 添加Authorization头
client.DefaultRequestHeaders.Add("Authorization",
$"WECHATPAY2-SHA256-RSA2048 {signature}");
返回参数变化:
csharp
复制
// 原XML解析
var prepayId = xmlDoc.SelectSingleNode("xml/prepay_id")?.InnerText;
// 新JSON解析
var result = await response.Content.ReadAsAsync<dynamic>();
return result.prepay_id;
需要补充的配置项(Web.config):
xml
复制
<appSettings>
<add key="WeChat_AppId" value="小程序AppID"/>
<add key="WeChat_MchId" value="商户号"/>
<add key="WeChat_ApiV3Key" value="APIv3密钥"/>
</appSettings>
运行 HTML
注意事项:
需要从微信商户平台下载API证书(p12格式)
证书密码为商户号(mchId)
回调通知需要实现签名验证
支付金额单位为分(示例中固定为1分钱,实际需要根据订单获取)
需要处理微信支付结果通知(/api/wechat/notify)
建议将证书文件存放在App_Data等受保护目录
生产环境需要添加完整的错误处理和日志记录
建议使用Postman测试支付接口时,按以下顺序调试:
先确保能成功获取prepay_id
再测试小程序端支付流程
最后验证回调通知处理逻辑