『微信』大神教你搞定微信小程序登录+支付Demo实战(环境搭建+源码)问题( 二 )


3)小程序请求服务器进行预下单 , 上送商品详情、金额、openid 。
4)服务器端接收请求 , 根据请求订单数据、生成第三方订单号 , 调用微信的统一下单接口 。
5)服务器收到预下单信息后 , 签名并组装支付数据 , 返回给小程序 。 所需数据见:小程序支付接口
6)小程序前端发起支付 , 并支付完成
7)服务器收到回调 。
2.1 登录 , 获取code 。
【『微信』大神教你搞定微信小程序登录+支付Demo实战(环境搭建+源码)问题】
『微信』大神教你搞定微信小程序登录+支付Demo实战(环境搭建+源码)问题
本文插图
2.2 通过code 获取openid(前端)
『微信』大神教你搞定微信小程序登录+支付Demo实战(环境搭建+源码)问题
本文插图
2.2 服务器端servlet(复写HttpServlet的doGet doPost函数)doPost的代码片段:
『微信』大神教你搞定微信小程序登录+支付Demo实战(环境搭建+源码)问题
本文插图
2.3 前端上送订单信息、openid请求预下单(在此 , 为方便 , 订单信息直接写死在服务器端了) , 若成功 , 则根据服务器端返回数据发起支付 。
『微信』大神教你搞定微信小程序登录+支付Demo实战(环境搭建+源码)问题
本文插图
2.4 服务器端预下单 , 2.5并签名返回支付请求数据 。

『微信』大神教你搞定微信小程序登录+支付Demo实战(环境搭建+源码)问题
本文插图
三、实战中遇到的问题
预下单和支付请求中 , 签名的密钥使用的是商户密钥 , 但是用code获取openid是使用小程序对应的secret key , 这个可以在小程序的后台看到 。
微信小程序前端发起post请求到服务器端时 , 服务器端收不到请求参数 。 原因是:微信API接口wx.request中:
a) 对于 GET 方法的数据 , 会将数据转换成 query string(encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)…)
b1) 对于 POST 方法且 header[‘content-type’] 为 application/json 的数据 , 会对数据进行 JSON 序列化
b2) 对于 POST 方法且 header[‘content-type’] 为 application/x-www-form-urlencoded 的数据 , 会将数据转换成 query string (encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)…)
所以 , 如果post请求 , 为省去服务器端反序列化的操作时 , 可使用header[‘content-type’] 为 application/x-www-form-urlencoded 的数据 。
3. 如果部署了servlet后 , tomcat重启后 , 需要等几分钟才能生效(原因是我的机器内存比较小 , 而tomcat又很占用内存资源) , 待熟悉tomcat 调优 。 [java进阶架构师]


推荐阅读