mui微信支付流程与bug

本文主要介绍了微信支付的前端实现步骤,强调了统一下单和调起支付接口的关键点,如签名验证、预支付ID的获取。同时,列举了一些常见的微信支付bug及解决思路,包括appid和密钥、签名问题、参数错误等,为开发者提供调试参考。此外,还提及了微信支付中避免缓存问题和参数类型错误的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说一说微信支付的大致流程,

申请之类的流程我就不说了,网上一大堆。

主要讲一下 代码流程

当获得了开放平台的支付权限后,就可以开始测试了。

因为我是前端,所以后端代码,还需要自己去找。

首先是统一下单。

页面逻辑是在点击购买的时候,将商品数据,或者商品id,一些相关字段,传递到后台

后台生成签名的时候一定要用签名工具测试,是否一致

后台生成统一下单的 prepayid 

然后再根据这个 prepayid 从新生成 调起支付接口的字段


 

这里要注意,时间戳和随机字符串。。。

 

然后从新根据 统一下单生成签名的方法 ,重新生成签名。

将这些数据返回给前端,由前端调起支付,

这种方法是不需要 openid的,微信只需要知道是谁付了款,不需要知道是谁下的单,到时候退款也只是钱回流到支付微信账号里面。

前端调起支付的代码其实也很简单。

逻辑有两种,一种就是先获取所有支付通道,让用户先选择,第二种,就是 点击下单后再获取支付通道,然后再让用户选择支付方式。都可以

 var channel = null;	//支付通道
mui.init();
				
				
				mui.plusReady(function(){
                //获取支付通道
              
	               getChannels();
	              
	            });


 //获取支付通道的方法
			 function getChannels(){
                    plus.payment.getChannels(function(channels) {
                        for (var i = 0; i < channels.length; i++) {
                            if (channels[i].id == "wxpay") {
                                channel = channels[i];
                            }
                        }
                        //plus.ui.toast("使用支付方式:" + channel.id);
                    }, function(e) {
                        plus.ui.toast("获取支付通道失败!");
                        console.log("获取支付通道失败!");
                    })
            }

 

然后是下单和支付 

//下单获取 调取支付的参数
			function orderAdd(){
				var num = g("num").value||1;
				var data = {
					url:"/api/Order/orderAdd",
					data:{
						access_token:acctoken(),
						bid:4||sid,
						address_id:29||addid,
						preference:g("preference").value||"",
						num:num,
					}
				}
				ajax(data,function(res){ 
					console.log(res);
					var data = {
						"appid":res.data[0].appid,
						"noncestr":res.data[0].nonce_str,
						"package":"Sign=WXPay",
						"partnerid":res.data[0].mch_id,
						"prepayid":res.data[0].prepay_id,
						"timestamp":res.data[0].timestamp,
						"sign":res.data[0].sign,
					}
					ajax_success_callback(data);
					//pay(data);
				})
			}
			
			     
                      //获取微信支付参数成功的回调函数
                function ajax_success_callback(resObj){
                    console.log("请求微信支付参数成功,返回的json:");
                    var res_str=JSON.stringify(resObj);
                    console.log(res_str);
                    //用返回参数 发起微信支付请求
                    plus.payment.request(channel,res_str,wxpay_success,wxpay_error);
                }
                //获取微信支付参数失败的回调函数
                function ajax_error_callback(e){
                    console.log("ajax获取参数失败");
                }
                //微信支付成功回调
                function wxpay_success(result){
                    plus.ui.alert("支付成功!",function()
                    {
                        mui.back();
                    })
                }
                   //微信支付失败回调
                function wxpay_error(error){
                	console.log(JSON.stringify(error))
                	plus.ui.alert(JSON.stringify(error));
                    plus.ui.alert("支付失败!");
                } 
			

至于里面的一些 封装的函数就不写出来,逻辑,流程知道就可以了。

后面再列出一些微信支付的bug 和 解决思路

1,appid 和 密钥

2,包名签名问题

3,统一下单 参数body 里面不要有中文,

4,如果碰到code -100 微信 -1 的时候

将之前的参数全部检查一次,如果还没有发现问题,可以先写一个微信分享,如果可以分享,那么就和签名没有关系。

那么可能就是传入的参数有bug,这里就需要仔细对比研究了。

5,微信可以退出登录,清楚一下缓存,或者更换手机测试,以免微信的缓存问题导致很长时间无效的调试。

6.调起微信支付传入的 参数必须是字符串 不能是json对象

7.其他的问题,暂时没有碰到了

以上就是mui微信支付碰到的一些bug,可以减少大家的一些调试时间。

 

如果感兴趣,也可以关注我的微信公众号,因为刚起步,所以只有几篇文章,之后会慢慢更新。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值