• 微信公众号JSAPI支付-多公众号向同一商户号支付的问题解决


    一、背景

      项目提供公众号商城集成,在公众号里进行商品的购买,并与多家公众号合作增加渠道流量。

    二、实现

      有关微信公众号、商户号的开通与支付绑定不细说

      从背景里可知,我们需要实现多个公众号购买向同一个公众号付钱的功能,微信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进行下单。

       不管是微信支付还是支付宝,总有复杂的支付场景存在,但是复杂的场景都有技术手段去实现,实在是实现不了的就联系官方共同研讨解决方案。

  • 相关阅读:
    关于ip层的作用网址链接
    转载 TCPIP学习笔记之概述
    转载pll工作模式解析
    关于modelsim添加库的说明
    转载.Avalon-MM 阿窝龙妹妹应用笔记
    转载.怎样在Quartus II中转化HDL文件为bsf文件?
    niosii boot过程
    转载--傅里叶级数的几何意义 – 巧妙记忆公式的方法
    第十三篇:带缓冲的IO( 标准IO库 )
    第十二章:Linux中权限控制实例
  • 原文地址:https://www.cnblogs.com/shuaiqing/p/10407177.html
Copyright © 2020-2023  润新知