【坑爹微信】微信支付相关问题解决
目录
导语
开发前准备
如果不知道怎么配置,请看
步骤一:发起支付准备
- 生成商户订单 先要根据自己的业务逻辑生成自己可读的商户订单号,一般推荐年月日+随机数+用户uid
$order_no = date(YmdHis).rand(1000,9999).$uid;
- 使用同一下单接口下单
UnifiedOrder_pub类:
我们实例化UnifiedOrder_pub,并依此传入参数,$appid,$mchid,$key,$appsecret
//appid 商家appid //mchid 商家商户号 //key 商家支付秘钥 //appsecret JSAPI获准码 //调用统一下单 $unifiedOrder = new UnifiedOrder_pub($this->config[pay_weixin_appid],$this->config[pay_weixin_mchid],$this->config[pay_weixin_key],$this->config[pay_weixin_appsecret]);
但是如果你写入了调试js的话可以看见具体错误,这里就不提调试js了。
第二步:向统一下单接口中添加所需参数
warning: 在第二步中,尤其要注意的就这个通知地址的格式,通知地址一定不能带任何参数的地址,包括你是pathinfo模式也好,只能以www.xxxxx.com/index.php这种模式结尾。 www.xxx.com/index.php?a=index,www.xxx.com/index.php/admin/index 这样的写法全部是错的。
第三步:获取预支付信息
将上述内容提交给接口,正确可返回预支付ID
$prepay_result = $unifiedOrder->getPrepayId();
如果错误,我们可以打印来查看是什么错误
var_dump($prepay_result); $prepay_result[return_code] == FAIL//标志支付失败 $prepay_result[return_msg]//这个角标中有具体错误信息打印看看! //缺少统一支付接口必填参数out_trade_no! //缺少统一支付接口必填参数body //缺少统一支付接口必填参数total_fee! //缺少统一支付接口必填参数notify_url! //...等等一些的错误提示,大家可以打印出来看看,然后对照着修改
当我们已经拿到预支付ID的时候,那么支付准备已经完成
调起JSAPI支付
第一步:在前台文件中我们使用注册支付JSAPI
第二步:支付js准备绑定事件(这里就举例按钮)
$(#button_pay_now).on(click,function(){
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(msg_json);
}
});
报错信息分析
1.缺少统一支付接口必填参数total_fee! 这个错造成的原因: q:你没有传递参数total_fee a:检查是否传递参数,最好一步步打印到日志中查看 q:total_fee 参数格式错误 a:参数的单位是分,也就是一元钱的话就是100,所以建议最后处理的时候都要处理为分,建议最后用floatval处理下
2.缺少统一支付接口必填参数notify_url! 这个错造成的原因: q:你没有传递参数notify_url a:检查是否传递参数,最好一步步打印到日志中查看 q:notify_url 参数格式错误 a:通知地址一定不能带任何参数的地址,包括你是pathinfo模式也好,只能以www.xxxxx.com/index.php这种模式结尾
3.签名错误 这个错造成的原因: 1.你的四个参数的错误,尤其注意key这个参数,如果你的key是大小写混合的话,一定要在签名前把其转化为统一的大写形式 2.签名中的APPID 和appsecret appid和商户号 不匹配
