写点什么

一招教你搞定微信小程序 - 登录 + 支付(后台 Java,windows 内核编程全套视频教程

用户头像
极客good
关注
发布于: 刚刚

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(前端)


![](https://upload-images.jianshu.io/upload_images/22459598-ba6fe771c29bba52.png?imageMogr2/auto-orient/strip%


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


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 的数据。?

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
一招教你搞定微信小程序-登录+支付(后台Java,windows内核编程全套视频教程