1、背景php
項目提供公衆號商城集成,在公衆號裏進行商品的購買,並與多家公衆號合做增長渠道流量。html
。ajax
2、實現api
有關微信公衆號、商戶號的開通與支付綁定不細說微信
從背景裏可知,咱們須要實現多個公衆號購買向同一個公衆號付錢的功能,微信api地址: https://pay.weixin.qq.com/wiki/doc/api/index.htmlcookie
看api中的業務流程實現起來也是比較簡單,商戶下訂單--微信下預支付訂單--商戶拉起JSAPI微信支付--微信支付回調商戶進行後處理。微信支付
可是因爲咱們使用的是JSAPI支付,在JSAPI下預支付訂單的時候有點很容易忽視,那就是openid參數。url
其餘支付方式(二維碼、付款碼等)都不須要傳openid,只有JSAPI支付的時候必須傳openid,並且這個openid是微信用戶在商戶號下的openid,spa
在我這個場景中,是多個公衆號向一個商戶號支付,因此openid是對應商戶號的,商城所在公衆號的openid是不成功的。
.net
經過看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後回調咱們服務的地址,因此在回調地址裏再重定向到商城頁面便可
3、總結
因此咱們的解決辦法是在加載商城的時候先獲取用戶對應商戶號的openId存儲在store中,在下訂單時從store中拿這個openId進行下單。
無論是微信支付仍是支付寶,總有複雜的支付場景存在,可是複雜的場景都有技術手段去實現,實在是實現不了的就聯繫官方共同研討解決方案。