我在使用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();
}
希望各位大神看看有什么问题,具体如果那里没有描述清楚,请指出来我给解释或者贴代码
补充:配置的支付授权目录和支付页面的路径是一直的,这个是经过仔细确认一直的,没有任何问题!
phpcn_u15822017-05-17 10:06:16
这种情况下,不是签名错误,就是支付路径不对。
在失败时,把整个 res 打出来,微信返回有其他信息的,不仅仅有err_msg
你的package参数是不是不对,参数值是prepay_id=xxx
高洛峰2017-05-17 10:06:16
timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
不知道是不是字段大小写原因?