第一个坑:配置公众号的支付授权目录
开发微信支付的过程中,可能所有的流程都搞明白了,可能在配置公众号的支付授权目录时会遇到问题,会不大好理解。
如果支付授权目录没有设置正确,在请求JSAPI时,会提示“3当前页面的url未注册”的错误。
怎么设置呢,首先要看你支付的当前页面URL,比如是:
http://www.xxx.com/wxpay/js_api_call.php
你就必须填写:
http://www.xxx.com/wxpay/
假如是:
http://www.xxx.com/wxpay/order/id/56.html
你就必须写:
http://www.xxx.com/wxpay/order/id/
假如是:
http://www.xxx.com/wxpay/order?id=56
你就必须写:
http://www.xxx.com/wxpay/order/
看出规律了吧,就是把最后一个反斜杠后面的内容去掉就OK了
第二个坑:微信支付成功后,notify_url 没收到通知的解决
回去调试了一阵,发现是网址格式问题,
这样的notify_url :http://www.a.com/index.php?/wechat/notify
微信是通知发送到这来:http://www.a.com/index.php 所以没法收到信息!
1,调起支付请求和 回调地址 写在一个目录下
2,域名要和后台配置的域名要一样
同意nginx的看法,我用thinkhp的,结果无法发送到www.xxx.com/index.php?m=pay&a=notify_url里。然后我在在根目录下加了pay目录后,在目录里用index.php进行处理,notify_url设为www.xxx.com/pay/index.php,可以接收到通知。
支付回调一般有个不成文的规定:传递给支付服务商的回调地址不允许带有任何参数。
之前的:(不行的)
http://api.wprc365.cn/index.php?r=wxPay/noticeurl
之后的:(可以的)
http://api.wprc365.cn/wxnotice.php
注意:特别是用框架写的程序,回调地址很容易出错,我用的是TP框架,回调地址:http://api.wprc365.cn/index.php/Ucenter/Weixin/notify----(错误,收不到回调)微信将index.php后面的都当参数了,而微信的规定是回调地址不允许带参数
第三个坑:微信公众号支付中传递参数
微信公众号支付必须以get方式out_trane_no 等参数
第四个坑:微信调用JS启动支付时,提示缺少参数total_fee之类的,肯定是你的签名出了问题,在程序中将签名一一打印出来,对比一下就能迅速定位到哪一块出错了
//生成签名,支付或红包等使用 public function makeSign( $data ) { //签名步骤一:按字典序排序参数 ksort( $data ); dd($data); $string = $this->ToUrlParams( $data ); //签名步骤二:在string后加入KEY $string = $string . "&key=" . self::$config['key']; //签名步骤三:MD5加密 echo $string; $string = md5( $string ); //签名步骤四:所有字符转为大写 $result = strtoupper( $string ); return $result; }重点关注这个字段package,prepay_id---prepay_id是用户下单访问微信服务器返回的参数,这一步错了JS肯定调用不了
$data['package'] = "prepay_id=" . $res['prepay_id'];