uni-app微信支付踩得坑总结,以及orderInfo格式

官方没有给出orderInfo的格式,所以不得不在官方示例hello_uni_app中截取(用HBuilderX新建示例工程)

微信支付订单:

{
	"data": {
		"appid": "wx0411fa6a39d61297",
		"noncestr": "jUsIgpt9H8meyYP1",
		"package": "Sign=WXPay",
		"partnerid": "1230636401",
		"prepayid": "wx20205704684293f30de855041611765700",
		"timestamp": 1576846624,
		"sign": "ED84A75D5CE5FC4A9FF8DA81BB7B0AED"
	},
	"statusCode": 200,
	"header": {
		"Transfer-Encoding": "chunked",
		"Server": "Tengine",
		"X-Android-Selected-Protocol": "http/1.1",
		"_": "HTTP/1.1 200 OK",
		"Content-Type": "text/plain;charset=UTF-8",
		"Via": "cache6.l2et2[257,0], kunlun7.cn698[278,0]",
		"X-Android-Response-Source": "NETWORK 200",
		"Date": "Fri, 20 Dec 2019 12:57:04 GMT",
		"EagleId": "3da864a515768466244555534e",
		"Connection": "keep-alive",
		"Timing-Allow-Origin": "*",
		"Access-Control-Allow-Origin": "*",
		"X-Android-Sent-Millis": "1576846625019",
		"X-Android-Received-Millis": "1576846625356",
		"Vary": "[Accept-Encoding, Accept-Encoding]"
	},
	"errMsg": "request:ok"
}

支付宝订单:

{
	"data": "alipay_sdk=alipay-sdk-php-20161101&app_id=2015112700878442&biz_content=%7B%22body%22%3A%22DCloud%E8%87%B4%E5%8A%9B%E4%BA%8E%E6%89%93%E9%80%A0HTML5%E6%9C%80%E5%A5%BD%E7%9A%84%E7%A7%BB%E5%8A%A8%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7%EF%BC%8C%E5%8C%85%E6%8B%AC%E7%BB%88%E7%AB%AF%E7%9A%84Runtime%E3%80%81%E4%BA%91%E7%AB%AF%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%92%8CIDE%EF%BC%8C%E5%90%8C%E6%97%B6%E6%8F%90%E4%BE%9B%E5%90%84%E9%A1%B9%E9%85%8D%E5%A5%97%E7%9A%84%E5%BC%80%E5%8F%91%E8%80%85%E6%9C%8D%E5%8A%A1%E3%80%82%22%2C%22subject%22%3A+%22DCloud%E9%A1%B9%E7%9B%AE%E6%8D%90%E8%B5%A0%22%2C%22out_trade_no%22%3A+%2220191220204211%22%2C%22timeout_express%22%3A+%2230m%22%2C%22total_amount%22%3A+%220.1%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%7D&charset=UTF-8&format=json&method=alipay.trade.app.pay¬ify_url=http%253A%252F%252Fdemo.dcloud.net.cn%252Fpayment%252Falipay%252Fnotify.php&sign_type=RSA2×tamp=2019-12-20+20%3A42%3A11&version=1.0&sign=acgqEMfn7w0RPcslPIrDzD6HCktgATmtpuqwLfMsIiEESyngwoummXvxqkCqTFvpmBZ5EqlesHdGXNbj2qynNCNB%2BfqYda1IKVnx5GpjvDz6iZjhX2UCDB6FBytwb9EaGfArVuNPCbdPjlGu%2BEemwfcmWR8NQxpQJTlvgABhCjxBcdz1gD36O7Rz%2BUAExDllmNbBlUCm8WQ1RIxUdhFWyc%2BHR2KD9kOt6LwhaoSHk%2F7%2ByWsahCcEUGVgUMPdMxFvfgmo1eGi6zDoLmZc1l7M%2FwWx2aYEPNc2L7RVpORy8OYRG8mY1RnbFm5jU0MtW0Gvcma84Nt1XFLSRkqD5oWWEQ%3D%3D",
	"statusCode": 200,
	"header": {
		"Transfer-Encoding": "chunked",
		"Server": "Tengine",
		"X-Android-Selected-Protocol": "http/1.1",
		"_": "HTTP/1.1 200 OK",
		"Content-Type": "text/plain;charset=UTF-8",
		"Via": "cache25.l2et2[18,0], kunlun8.cn356[45,0]",
		"X-Android-Response-Source": "NETWORK 200",
		"Date": "Fri, 20 Dec 2019 12:42:11 GMT",
		"EagleId": "7b8a431c15768457313923769e",
		"Connection": "keep-alive",
		"Timing-Allow-Origin": "*",
		"Access-Control-Allow-Origin": "*",
		"X-Android-Sent-Millis": "1576845731970",
		"X-Android-Received-Millis": "1576845732056",
		"Vary": "[Accept-Encoding, Accept-Encoding]"
	},
	"errMsg": "request:ok"
}

网上搜到的比较重要的几篇参考文章:

 uniapp 开发踩坑记录

@将心比心 

https://www.cnblogs.com/ailingfei/p/10620316.html

微信APP支付官方文档-统一下单:

https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1

@将心比心同学踩坑时提醒的一条关键信息就是,app支付返回的sign是30位!30位!30位! 所以你在做验证计算后还得截取前30位给坑爹的uniapp才能用!

1.要注意返回的参数大小写要严格对应,至少你在调参数时候要注意大小写不然调不到

2.timestamp是int型,不是string

我的服务端下单处理回调的代码部分如下:

var appId = order_result.appid;
var timeStamp = TenPayV3Util.GetTimestamp();
var nonce_str = order_result.nonce_str;
switch (paymentChannel)
{
	case PaymentChannel.小程序:
	case PaymentChannel.公众号:
		{
			var package = $"prepay_id={order_result.prepay_id}";
			var jobj = new JObject
			{
				{"appId", appId},
				{"timeStamp", int.Parse(timeStamp)},
				{"nonceStr", nonce_str},
				{"package", package},
				{"signType", "MD5"},
				{"paySign", TenPayV3.GetJsPaySign(appId, timeStamp, nonce_str, package, api_key)},
			};
			return jobj;
		}
	case PaymentChannel.开放平台:
		{
			var package = "Sign=WXPay";
			var partnerid = order_result.mch_id;
			var prepay_id = order_result.prepay_id;
			var paySign = TenPayV3.GetJsPaySign(appId, timeStamp, nonce_str, package, api_key);
			var sign = paySign.Substring(0, 30);
			var jobj = new JObject
			{
				{"appid", appId},
				{"timestamp", int.Parse(timeStamp)},
				{"noncestr", nonce_str},
				{"package", package},
				{"partnerid", partnerid},
				{"prepayid", prepay_id},
				{"sign", sign},
			};
			return jobj;
		}
	default:
		throw new Exception($"不支持的支付渠道:{paymentChannel}");
}

看到没,小程序公众号用的是一套,区别就在于有没有appId不过用一套无所谓,app支付的回调参数全部小写,不用驼峰式

然后要注意的是app支付成功后,微信发送的支付回调api要写成异步

uni-app微信支付踩得坑总结,以及orderInfo格式_第1张图片

为什么异步不能用void呢?坑在这里:

Asp.Net Core 轻松学-经常使用异步的你,可能需要看看这个文章

@微信公众号:DotNet程序园

https://www.cnblogs.com/viter/p/10271212.html

 

 

 

 

你可能感兴趣的:(解决方案,微信支付)