您的位置:首页技术文章
文章详情页

javascript - 微信支付:H5调起支付API,直接说支付失败

【字号: 日期:2022-09-26 08:50:32浏览:108作者:猪猪

问题描述

我在使用java开发微信的公众号支付功能,使用的是公众号内部支付功能

第一步,统一下单接口已经调通,可以获取prepay_id(下面会有代码贴出),可是在通过JS调起支付的API的时候,直接返回的就是失败,页面有调用微信支付的窗口闪动一下,其实根本没调起来支付控件,也不知道哪里出了问题,只能在手机上调用查看,也无法进行跟踪调查,alert出来的数据直接就是失败,具体的JS代码如下

function onBridgeReady(){var param = {}; param.openid = openid; param.orderAmount = 11; param.stageid = 2007;console.log(param);//通过下面接口获取统一下单接口参数 var url = puburl + '/wxpay/createOrderinfo'; var data = ajaxUtil.ajaxJson(url, JSON.stringify(param)); console.log(data); if(data.code != 0) {console.log(data);return false; }var result = data.data; alert(JSON.stringify(result));//上面接口已经获取接口需要的数据, //根据微信官方提供的demo就是通过下面方式进行参数赋值 WeixinJSBridge.invoke( ’getBrandWCPayRequest’, { 'appId':result.appId, 'timeStamp':result.timeStamp, 'nonceStr':result.nonceStr, 'package':result.prepay_id,'signType':result.signType,'paySign':result.paySign}, function(res){ //可是程序走到这一步 //打印出 res.err_msg的结果直接就是:get_brand_wcpay_request:fail //只能在手机上调试,无法查看具体错误原因 alert(res.err_msg); // 使用以上方式判断前端返回, //微信团队郑重提示:res.err_msg将在用户支付成功后返回ok, //但并不保证它绝对可靠。 if(res.err_msg == 'get_brand_wcpay_request:ok' ) {alert('支付成功!') } else if(res.err_msg == 'get_brand_wcpay_request:cancel') {alert('支付取消!'); } else if(res.err_msg == 'get_brand_wcpay_request:fail') {alert('支付失败!'); }} );}if (typeof WeixinJSBridge == 'undefined'){ if( document.addEventListener ){ document.addEventListener(’WeixinJSBridgeReady’, onBridgeReady, false); }else if (document.attachEvent){ document.attachEvent(’WeixinJSBridgeReady’, onBridgeReady);document.attachEvent(’onWeixinJSBridgeReady’, onBridgeReady); }}else{ onBridgeReady();}

希望各位大神看看有什么问题,具体如果那里没有描述清楚,请指出来我给解释或者贴代码

补充:配置的支付授权目录和支付页面的路径是一直的,这个是经过仔细确认一直的,没有任何问题!

问题解答

回答1:

亲,你的微信支付授权URL配置的是否正确?另外,http和https一定要严格匹配哟

回答2:

调统一下单成功吗?要是成功的话,看看签名对不对,再看看支付目录配置。微信返回的提示具体是什么?

回答3:

这种情况下,不是签名错误,就是支付路径不对。在失败时,把整个 res 打出来,微信返回有其他信息的,不仅仅有err_msg

你的package参数是不是不对,参数值是prepay_id=xxxjavascript - 微信支付:H5调起支付API,直接说支付失败

回答4:

timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符

不知道是不是字段大小写原因?

标签: 微信