最近公司有新的業務需求,在同一個域名中接入兩個收款賬號,包括支付寶、微信、銀聯。之前都是一個域名一個收款賬號,並且他們的備案主體是相同的。在接到需求之后咨詢了支付寶、微信、銀聯各自的客服是否可以在一個域名同時接入兩個公司的收款賬號,得到的答案都是否定的。因為公司的ICP備案主體與收款賬號的備案主體不同所以不支持。后來換做別的同事來咨詢對方又不完全否定,說是沒有明文規定可以或者不可以,於是乎抱着“法不禁止皆允許”的態度開始張整。首先是域名備案主體的授權備案,各種申請、簽約、經過測試環境測試最終達到了目的。(暫時沒有上生產,具體情況待后續更新)
借此機會,自己也回顧了下第三方支付的一些流程(PC端)、僅僅是自己的理解,不喜勿噴。
一、微信支付
首選,需要申請微信公眾平台(需要填寫一些公司信息 注冊號 營業執照等),並且申請支付功能。審核通過之后會看到自己應用的APPID以及分配到的微信支付商戶號 以及密鑰。
進入微信公眾平台后台,找到開發者中心,修改網頁授權獲取用戶信息、填寫自己的域名。
然后通過微信商戶平台登錄 賬戶中心-API安全 中設置自己的秘鑰(key)輸入32位的秘鑰、自己定義一個數字進行MD5加密。這里支付平台就設置完畢。
接下來的開發工作就需要參考開發者中心的文檔進行了,首先微信支付有兩種支付模式,結合自己的需求選擇、這里我選擇模式二(具體文檔見:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1)
因為模式二與模式一相比,流程更為簡單,不依賴設置的回調支付URL。商戶后台系統先調用微信支付的統一下單接口,微信后台系統返回鏈接參數code_url,商戶后台系統將code_url值生成二維碼圖片,用戶使用微信客戶端掃碼后發起支付。注意:code_url有效期為2小時,過期后掃碼不能再發起支付。這是微信官方講解、相對來說也比較通俗易懂,
1、就是獲取自己的訂單信息與自己的商戶信息結合、組裝成參數調用微信的統一下單接口,其中Sign簽名生成方法簡單理解如下:
1.1 微信支付中將數據里面的內容進行鑒權、確定攜帶信息的真實、有效、合理、因此這里將定義生成sign字符串的方法。
a、對所有傳入參數按照字段名ASCII碼從小到大排序后使用鍵值對的格式(即key1=value1&key2=value2..)拼成字符串string ,注意值為空的參數不參與簽名;
b、在string最后拼接上key=key(商戶支付密鑰)得到stringSignTemp 字符串 並對其進行md5運算,再將得到的字符串所有字符轉換為大寫,得到sign值
具體生成sign簽名的方法SDK中可以找到
具體參數請見(https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1)
2、接下來從微信支付返回信息中解析出code_url 然后調用生成二維碼的方法生成二維碼、當微信支付成功之后會調用之前預支付訂單中的notify_url地址返回支付成功。注意 很多人會遇到微信反復調取支付成功接口導致錯誤,所以在接收到支付成功請求時必須加標識是否已經處理過或者加標識、驗證通過之后再走自己的業務流程。
3、也可以調用查詢接口查詢是否支付成功。
時間原因 今天先寫微信了 改天寫支付寶