微信的接口真的很坑爹,只返回成功或失败,从来不会告诉你为什么失败。这个微信支付的js接口也是调了一个下午才成功,期间踩了不少坑,在这里总结一下,而且把支付接口封装成了一个js文件,这样以后调用就很方便了。
坑1:公众号里面可以设置测试目录,例如是 www.baidu.com/pay/,这样设置的,那么的你支付的页面的url一定要在这个目录下面,而且不能有二级目录,例如支付的url是www.baidu.com/pay/1的话是可以的,但是www.baidu.com/pay/1/1这样是不可以的,会返回access denied
坑2:支付的链接一定要在该公众号里面打开的,例如点击公众号按钮打开,所以测试的时候可以用公众号把支付链接发送给测试的个人微信号,这样个人微信号打开该链接才能触发微信支付的接口,否则也是返回access denied
下面是调用我封装好的支付接口的代码
<script src="/crowd/js/sha1.js"></script>
<script src="/crowd/js/weixin_pay.js"></script>
<script src="/crowd/js/jQuery.md5.js"></script>
<script type="text/javascript">
function after_pay(ret){
alert(ret[0]+ret[1])
}
function pay(money){
ret=weixin_pay('{{ip}}',money,'支持老师','',after_pay) }
</script>
需要导入三个js文件,一个是sha1加密方法,一个是md5的加密方法,最后一个就是我封装好的支付接口。下载地址:http://download.csdn.net/detail/siding159/7747653
wexin_pay方法需要输入四个参数,用户客户端的ip地址,我的做法是后端获取,然后返回网页的时候带上,支付的金额数量,支付说明,订单号out_trade_no(微信文档那里说这个需要在商户内部是唯一的,就是唯一标识这个订单的编号,这里可以输入为空,这样的话,weixin_pay函数里面会自己生产一个唯一的字符串,然后再ret里面返回)和支付完成后回调的函数after_pay
使用weixin_pay.js需要修改里面的参数为自己公众号的参数,例如appid那些。