微信的接口真的很坑爹,只返回成功或失敗,從來不會告訴你為什么失敗。這個微信支付的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那些。