进阶架构精品专题
- Mysql优化专题(★★★★)
- 网络协议专题(★★★★)
- 其余18大专题,请在主页菜单栏查看
- 后台回复【加群】,获取BAT真实面经

微信支付类型
微信支付实际上有很多种不同的类型,具体要使用哪一种就需要根据不同的应用场景来选择,官方给出的参考例子:
刷卡支付:用户打开微信钱包的刷卡的界面,商户扫码后提交完成支付。
公众号支付:用户在微信内进入商家H5页面,页面内调用JSSDK完成支付
H5支付:用户在微信以外的手机浏览器请求微信支付的场景唤起微信支付
建议大家先阅读以下文章了解相关内容:

公众号支付相关配置
本篇文章中实现的是公众号支付,实现条件如下:
1.需要一个已经进行微信认证的公众号

2.该公众号需要开通微信支付功能


4.拥有一个正式的应用服务器,并且注册域名
微信支付涉及的私密数据比较多,不允许使用natapp,花生壳之类的内网穿透工具实现,需要有正式的服务器环境,并且要注册域名,不能使用IP。
5.相关配置
5.1 配置支付授权目录,登录商户平台——产品中心——开发配置
图中配置的例子,代表在项目根路径下,以及web目录下的页面都有支付权限,如果不在该路径的页面,则无法调用支付功能。

5.2 设置API密钥,登录商户平台——账户中心——API安全——API密钥
该密钥在后面的代码中计算支付签名的时候需要使用到。

5.3 配置JS接口安全域名与网页授权域名,登录公众平台——公众号设置——功能设置
配置网页授权域名:主要用于获取用户的openId,需要识别这是哪个人。
配置JS接口安全域名:要让我们的页面中弹出输入密码的窗口,需要使用微信提供的JS-SDK工具,如果不配置JS接口安全域名,你的页面无法使用JS-SDK。

公众号支付实现流程

流程有很多,不一一演示,我们选取核心部分来实现。
1.提供商城主页,用户进入后通过网页授权获取openid

如果对网页授权不熟悉的同学先参考这篇文章:
当用户第一次打开主页,默认没有code参数,此时会先重定向到获取授权的地址
(如果只需要获取openid,可以使用scope为snsapi_base静默授权的方式)
经过授权地址再重定向到我们的index.do时,会带上code参数,此时即可通过接口获取用户的openid
具体页面根据自己的项目添加,主要是页面需要提供一个可以马上下订单的按钮即可。(这里不演示加入购物车功能)

script $ { //立即购买按钮 $.val; //提交到下单 window.location.href = "/order.do?productId="+id; }) })/script3.接收商品参数并调用微信支付统一下单接口
但此处重点在支付流程,商品的属性值和订单相关值,暂且先使用假数据。
根据文档介绍,我们调用统一下单接口时需要带上相关必填的参数如下:

1.PNG
把必填的参数封装成对应的实体类:

调用接口成功后返回的结果也封装成实体类:

该结果中最重要的是prepay_id参数,在页面中弹出支付窗口时需要用到。

注意:下单的业务逻辑,正常是需要抽取到业务层的,但是此处为了方便阅读代码,直接写到了控制器上。
下面是jssdk中config权限使用到的的签名,以及微信支付使用的签名的算法代码。
官方文档参考:
4.提供订单展示页面


支付完成:

5.支付结果的处理