python开发微信扫码支付
?
做了京東,支付寶和微信的python版本支付,發現只有微信支付開發文檔是最用心去做的,講解的非常仔細,還有大量的偽代碼,說實話,實現起來真是沒有難度,只是前期準備的東西有很多,比如要申請各種認證,至少到目前為止,我沒有發現諸如京東支付或者支付寶支付那樣的測試環境供普通開發者去調試
技術描點
微信支付方式非常多,詳見:https://pay.weixin.qq.com/wiki/doc/api/index.html。
我在這里是用的掃碼支付,用于pc網站。首先要準備的是兩個重要的帳號:公眾帳號ID和商戶號。所以要先去以公司的名義申請商戶資質
各種申請好了之后,找到【公眾帳號ID】和【商戶號】就可行,【公眾帳號ID】藏的比較隱秘,不太好找,要用心找。
掃描支付有兩種模式:模式一和模式二:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5
我推薦使用模式二,應該說也是官方推薦的,因為它簡化了很多步驟,讓流程更容易讓開發者理解
業務流程說明:
(1)商戶后臺系統根據用戶選購的商品生成訂單。 (2)用戶確認支付后調用微信支付【統一下單API】生成預支付交易; (3)微信支付系統收到請求后生成預支付交易單,并返回交易會話的二維碼鏈接code_url。 (4)商戶后臺系統根據返回的code_url生成二維碼。 (5)用戶打開微信“掃一掃”掃描二維碼,微信客戶端將掃碼內容發送到微信支付系統。 (6)微信支付系統收到客戶端請求,驗證鏈接有效性后發起用戶支付,要求用戶授權。 (7)用戶在微信客戶端輸入密碼,確認支付后,微信客戶端提交授權。 (8)微信支付系統根據用戶授權完成支付交易。 (9)微信支付系統完成支付交易后給微信客戶端返回交易結果,并將交易結果通過短信、微信消息提示用戶。微信客戶端展示支付交易結果頁面。 (10)微信支付系統通過發送異步消息通知商戶后臺系統支付結果。商戶后臺系統需回復接收情況,通知微信后臺系統不再發送該單的支付通知。 (11)未收到支付通知的情況,商戶后臺系統調用【查詢訂單API】。 (12)商戶確認訂單已支付后給用戶發貨。看了上面的流程簡介,是不是感覺非常簡單
一. 統一下單API
接口:https://api.mch.weixin.qq.com/pay/unifiedorder
接口參數說明:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1
二. 簽名
微信的簽名是三種支付方式中最簡單的,沒有使用公私鑰的非對稱加解密驗簽,而是用的MD5(注意在商戶平臺里設置MD5)。
詳情請見:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=4_3
看看人家的簽名步驟,就差在你背后教你手寫代碼了。還是公司大啊
簽名完的xml格式:
<xml><appid>wx2421b1c4370ec43b</appid><attach>支付測試</attach><body>JSAPI支付測試</body><mch_id>10000100</mch_id><detail><![CDATA[{ "goods_detail":[ { "goods_id":"iphone6s_16G", "wxpay_goods_id":"1001", "goods_name":"iPhone6s 16G", "quantity":1, "price":528800, "goods_category":"123456", "body":"蘋果手機" }, { "goods_id":"iphone6s_32G", "wxpay_goods_id":"1002", "goods_name":"iPhone6s 32G", "quantity":1, "price":608800, "goods_category":"123789", "body":"蘋果手機" } ] }]]></detail><nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str><notify_url>http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url><openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid><out_trade_no>1415659990</out_trade_no><spbill_create_ip>14.23.150.211</spbill_create_ip><total_fee>1</total_fee><trade_type>JSAPI</trade_type><sign>0CB01533B8C1EF103065174F50BCA001</sign> </xml>然后用requests庫發送一個post請求就ok了
三. 生成二維碼
在下單成功之后,會返回二維碼的內容,拿到這個之后,自己在后臺生成一個二維碼圖片給用戶就可以了,是不是非常簡單。
四. 異步回調
在用戶掃碼并支付成功之后,老規矩會觸發一個異步通知,這個通知會通知支付的狀態,一定要以這個通知為標準。處理完邏輯之后,一定要記得返回一個確認信息給微信
# 在處理好之后,一定要返回給微信 xml_str = MxPay.get_xml({"return_code": "SUCCESS"}) return HttpResponse(xml_str)而且一定要記住,當用戶支付成功之后,會不停的往你設定的這個異步回調地址發post請求,直到你回復了,才停止發送。所以在處理的時候,一定要判斷是否處理過了
五. 申請退款
涉及到退款,那可馬虎不得,微信也說了,下單隨便下,退款那得慢慢來。所以在這里退款的操作,要特別注意的是需要帶證書(微信支付簽發的)
requests.post(url, data=json.dumps(xml_str, ensure_ascii=False),cert=(self.API_CLIENT_CERT_PATH, self.API_CLIENT_KEY_PATH))整體來說,微信支付很簡單,看看文檔肯定是沒有問題的。
setting文件的一些配置
# 微信分配的公眾賬號ID APP_ID = "wx6534240dfae560" # 微信支付分配的商戶號 MCH_ID = "13459829292" # 私鑰(在商戶后臺設置的就是這個值,注意修改任何一段需要同步修改) WX_MCH_KEY = "D3EG723wIxgv2jnEgkr38yNJ8cP05D6aoT"# 異步接收微信支付結果通知的回調地址,通知url必須為外網可訪問的url,不能攜帶參數。 ASYN_NOTIFY_URL = "http://xxxxxx.com:8888/test/weixin/"# 統一下單地址 ORDER_URL = "https://api.mch.weixin.qq.com/pay/unifiedorder"# 查詢訂單url SEARCH_URL = "https://api.mch.weixin.qq.com/pay/orderquery" # 關閉訂單url CLOSE_URL = "https://api.mch.weixin.qq.com/pay/closeorder"# 申請退款url REFUND_URL = "https://api.mch.weixin.qq.com/secapi/pay/refund"# 查詢申請退款 SEARCH_REFUND_URL = "https://api.mch.weixin.qq.com/pay/refundquery"# 服務器存放證書路徑(微信支付簽發的) API_CLIENT_CERT_PATH = "/path/your/cert/apiclient_cert.pem" API_CLIENT_KEY_PATH = "/path/your/cert/apiclient_key.pem"BT搜索? ? BT螞蟻
總結
以上是生活随笔為你收集整理的python开发微信扫码支付的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电视ping功能测试软件,PingMon
- 下一篇: sftp服务器配置管理系统,配置sftp