一、背景
項目提供公眾號商城集成,在公眾號里進行商品的購買,並與多家公眾號合作增加渠道流量。
。
二、實現
有關微信公眾號、商戶號的開通與支付綁定不細說
從背景里可知,我們需要實現多個公眾號購買向同一個公眾號付錢的功能,微信api地址: https://pay.weixin.qq.com/wiki/doc/api/index.html
看api中的業務流程實現起來也是比較簡單,商戶下訂單--微信下預支付訂單--商戶拉起JSAPI微信支付--微信支付回調商戶進行后處理。
但是由於我們使用的是JSAPI支付,在JSAPI下預支付訂單的時候有點很容易忽視,那就是openid參數。
其他支付方式(二維碼、付款碼等)都不需要傳openid,只有JSAPI支付的時候必須傳openid,而且這個openid是微信用戶在商戶號下的openid,
在我這個場景中,是多個公眾號向一個商戶號支付,所以openid是對應商戶號的,商城所在公眾號的openid是不成功的。
通過看api知道微信提供獲取對應公眾號的openId的接口:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_4
那接下去我們首先要做的事情就是先獲得 微信用戶在商戶號的openid。又翻閱了許多前輩們的資料,https://blog.csdn.net/yusewuhen/article/details/51774010,,https://blog.csdn.net/abcde474524573/article/details/53123641
都是把 獲得的openId存儲在cookie里回傳頁面,其中都用了resbonse.sendRedirect(微信授權URL),這種只有action請求的方式能用,我們用的h5所以都是使用的ajax方式,而ajax不支持sendRedirect,這如何解決呢?
后來又查了很多資料發現ajax不能直接使用sendRedirect,但是可以把微信授權url返回再用window.location.href去實現重定向。
后台服務
前台調用
因為微信授權url中有一個redirect_uri是獲取授權code后回調我們服務的地址,所以在回調地址里再重定向到商城頁面即可
三、總結
所以我們的解決辦法是在加載商城的時候先獲取用戶對應商戶號的openId存儲在store中,在下訂單時從store中拿這個openId進行下單。
不管是微信支付還是支付寶,總有復雜的支付場景存在,但是復雜的場景都有技術手段去實現,實在是實現不了的就聯系官方共同研討解決方案。