微信小程序支付接口怎么弄(大神教你搞定微信小程序登录)

微信小程序支付接口怎么弄(大神教你搞定微信小程序登录)(1)

介绍一个可运行的微信小程序登录 支付的demo。接触了小程序简易教程的,想必都知道我们必然有自己的后台应用服务器,来处理我们自己的业务逻辑、请求微信服务完成一定的功能。在此,我们的后台采用java环境,本文将首先介绍环境搭建的过程,随后介绍登录 支付的流程及代码

一、后台web服务环境搭建

1. 安装jdk、tomcat,ICP备案的域名准备。

Linux安装jdk:https://blog.csdn.net/zhang918784312/article/details/79751283

Linux 安装tomcat:https://www.cnblogs.com/EasonJim/p/7202844.html

经过icp备案的域名,请自行准备。

2.配置https,由于小程序请求url必须是https,故而必须配置支持https请求。本人采用的是在阿里云购买的域名,故而采用的证书也是阿里云生成的ssl证书,可参考如下两篇博文进行配置。当然,你也可以通过别的方式生成证书,更或者通过nginx作反向代理到你的服务器。

https://blog.csdn.net/qq_28189091/article/details/75078164

https://blog.csdn.net/z_xuewen/article/details/78176509

同时,务必将您的小程序域名绑定在小程序后端。登入小程序后台,【设置】-【开发设置】-【服务器域名】

  1. 部署web服务

如上两步完成后,请务必确认通过你的域名(https://...)可以展示tomcat的默认页之后,开始部署我们的web服务。在此,就简单粗暴的在webapps下建立小程序的根目录,我命名为wechatserver,在此目录下,创建WEB-INFO,下面的目录结构如下:

微信小程序支付接口怎么弄(大神教你搞定微信小程序登录)(2)

classes存放自己写的类的classes文件,lib存放我们项目依赖的jar包,logs用于存放我们的日志输出,web.xml是我们这个项目的配置。demo中,我们只有一个servlet接收小程序前端请求,web.xml中增加配置如下:

微信小程序支付接口怎么弄(大神教你搞定微信小程序登录)(3)

4. log4j 应用在开发调试中,我们免不了需要通过打印日志进行调试,因此在此增加了日志的使用。web.xml中增加配置:

微信小程序支付接口怎么弄(大神教你搞定微信小程序登录)(4)

在classes增加文件,log4j.properties,内容如下:

微信小程序支付接口怎么弄(大神教你搞定微信小程序登录)(5)

log4j 在java中的引用、使用:public static Logger logger = Logger.getLogger(WechatServlet.class);logger.info(“打印信息”);

二、微信小程序登录 支付

1. 小程序前端目录准备

基于微信小程序工具生成的默认hello world程序,pages下先建立目录order,随后在order目录生成一个新的page,命名为order,结构如下图:

微信小程序支付接口怎么弄(大神教你搞定微信小程序登录)(6)

image

在index中增加按钮,进入order。index.wxml

微信小程序支付接口怎么弄(大神教你搞定微信小程序登录)(7)

order.xml中描述商品信息,增加支付按钮,order.js 支付事件处理。

2. 登录 支付 code

流程大概分为几步:

1)登录,获取code(一个code只能用一次)

2)通过code获取openid(通过请求服务器,由服务器请求微信获取并返回小程序)。微信登录 获取openid接口。

3)小程序请求服务器进行预下单,上送商品详情、金额、openid。

4)服务器端接收请求,根据请求订单数据、生成第三方订单号,调用微信的统一下单接口。

5)服务器收到预下单信息后,签名并组装支付数据,返回给小程序。所需数据见:小程序支付接口

6)小程序前端发起支付,并支付完成

7)服务器收到回调。

2.1 登录,获取code。

微信小程序支付接口怎么弄(大神教你搞定微信小程序登录)(8)

2.2 通过code 获取openid(前端)

微信小程序支付接口怎么弄(大神教你搞定微信小程序登录)(9)

2.2 服务器端servlet(复写HttpServlet的doGet doPost函数)doPost的代码片段:

微信小程序支付接口怎么弄(大神教你搞定微信小程序登录)(10)

2.3 前端上送订单信息、openid请求预下单(在此,为方便,订单信息直接写死在服务器端了),若成功,则根据服务器端返回数据发起支付。

微信小程序支付接口怎么弄(大神教你搞定微信小程序登录)(11)

2.4 服务器端预下单,2.5并签名返回支付请求数据。

微信小程序支付接口怎么弄(大神教你搞定微信小程序登录)(12)

三、实战中遇到的问题

预下单和支付请求中,签名的密钥使用的是商户密钥,但是用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进阶架构师]

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页