一招教你搞定微信小程序 - 登录 + 支付(后台 Java,windows 内核编程全套视频教程
log4j 在 java 中的引用、使用:?public static Logger logger = Logger.getLogger(WechatServlet.class);?logger.info(“打印信息”);
二、微信小程序登录+支付
1. 小程序前端目录准备
基于微信小程序工具生成的默认 hello world 程序,pages 下先建立目录 order,随后在 order 目录生成一个新的 page,命名为 order,结构如下图:?
在 index 中增加按钮,进入 order。?index.wxml
order.xml 中描述商品信息,增加支付按钮,order.js 支付事件处理。
2. 登录+支付 code
流程大概分为几步:?
1)登录,获取 code(一个 code 只能用一次)?
2)通过 code 获取 openid(通过请求服务器,由服务器请求微信获取并返回小程序)。微信登录+获取 openid 接口。
3)小程序请求服务器进行预下单,上送商品详情、金额、openid。?
4)服务器端接收请求,根据请求订单数据、生成第三方订单号,调用微信的统一下单接口。?
5)服务器收到预下单信息后,签名并组装支付数据,返回给小程序。所需数据见:小程序支付接口?
6)小程序前端发起支付,并支付完成?
7)服务器收到回调。
2.1 登录,获取 code。
2.2 通过 code 获取 openid(前端)
7CimageView2/2/w/1240)
2.2 服务器端 servlet(复写 HttpServlet 的 doGet doPost 函数)doPost 的代码片段:
2.3 前端上送订单信息、openid 请求预下单(在此,为方便,订单信息直接写死在服务器端了),若成功,则根据服务器端返回数据发起支付。
2.4 服务器端预下单,2.5 并签名返回支付请求数据。
三、实战中遇到的问题
预下单和支付请求中,签名的密钥使用的是商户密钥,但是用 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 的数据。?
评论