【微信小程序】支付过程详解
一、介绍
今天跟大家分享微信小程序集成支付。
二、分析
1、小程序支付API
地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-pay.html#wxrequestpaymentobject

注释:
通过接口的查看,我们知道,小程序端要想使用支付的接口,必须要拿到相应的值
timeStamp:Linux时间戳,可获取本地时间。
nonceStr:随机字符串,从服务器统一下单接口返回。
package:统一下单接口返回的prepay_id参数值,发送提交时格式‘prepay_id=*’
signType:算法签名直接写MD5
paySign:签名,签名算法。签名必须严格按按照如下规则进行签名,注意一定拼接上key,关于key后面再说。
举例:paySign = MD5(appId=wxd678efh567hg6787&nonceStr=5K8264ILTKCH16CQ2502SI8ZNMTM67VS&package=prepay_id=wx2017033010242291fcfe0db70013231072&signType=MD5&timeStamp=1490840662&key=qazwsxedcrfvtgbyhnujmikolp111111) = 22D9B4E54AB1950F51E0649E8810ACD6
2、微信支付接口
虽然我们已经查看了小程序的支付接口,但是到此时,我们还是不知道这些参数怎么得来,接下来我们选择支付接口中的了解更多信息,查看微信支付接口文档。
打开后,我们可以看到如下的截图。
第一步:开发步骤:
地址:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1

从上面我们得到的有用信息是:
1)小程序支付跟JSAPI和JSSDK很相似
2)统一下单,都需要首先获取到Openid,调用相同的API,通过下面的我们的得知是https://api.mch.weixin.qq.com/pay/unifiedorder
3)调起支付页面协议,小程序只支持HTTPS,
4)注意点,支付目录和授权域名,小程序都是无。
5)小程序的回调函数
第二步:业务流程
地址:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=2

分析上面的时序图,
1)用户进入小程序,通过小程序发送下单支付请求,到我们的商户系统。
过程拆解:商户系统可以理解为我们自己的商户服务器,存放我们服务器的代码,这个过程就是,用户发送一个请求到我们自己的服务器,参数就是商品的一些信息。
2)服务器调用小程序登录API,微信服务器后台返回openid,商户服务器生成订单,调用统一下单API,返回预付单信息(prepay_id),将组合再次签名。
过程拆解:我们自己的商户服务器,调用微信登录的API,这时候从微信的服务器拿到用户的openid,拿到openid之后,我们自己的服务器要组合生成一条订单,通过过程1发送过来的商品信息,组合生成一条订单(可以参看统一下单API所需的参数),然后调用统一下单API,这时候微信服务器就返回给了我们prepay_id,我们自己的服务器通过再次签名,可以拿到五个参数和sign
3)返回支付参数(5个参数和sign),小程序中发起下单请求到我们商户服务器,这时候就可把相应的把小程序支付API需要的信息都返回给我们的小程序了。
4)调用wx.requestPayment,按照规则传入我们需要的信息。
5)后面就是支付成功失败的回调和显示了。
三.服务器代码分析
1、总览
服务器demo下载地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
微信支付开发文档:https://pay.weixin.qq.com/wiki/doc/api/index.html
证书下载地址:商户平台下载证书,账户中心->账户设置->API安全 下载证书&设置秘钥
这里的秘钥就是最开始说的key。
2、代码结构,以PHP为例(WxpayAPI_php_v3)
SDK目录结构
|-- cert
| |-- apiclient_cert.pem
| `-- apiclient_key.pem
|-- download.php
|-- index.php
|-- lib
| |-- WxPay.Api.php
| |-- WxPay.Config.php
| |-- WxPay.Data.php
| |-- WxPay.Exception.php
| `-- WxPay.Notify.php
|-- logs
| |-- 2015-03-06.log
| `-- 2015-03-11.log
|-- micropay.php
|-- native.php
|-- native_notify.php
|-- notify.php
|-- orderquery.php
|-- qrcode.php
|-- refund.php
|-- refundquery.php
|-- unifiedorder.php
`-- unit
|-- WxPay.JsApiPay.php
|-- WxPay.MicroPay.php
|-- WxPay.NativePay.php
|-- log.php
`-- phpqrcode
目录功能简介
lib
API接口封装代码
WxPay.Api.php 包括所有微信支付API接口的封装
WxPay.Config.php 商户配置
WxPay.Data.php 输入参数封装
WxPay.Exception.php 异常类
WxPay.Notify.php 回调通知基类
cert
证书存放路径,证书可以登录商户平台https://pay.weixin.qq.com/index.php/account/api_cert下载
unit
工具类
unit/phpqrcode
开源二维码php代码
logs
日志文件
3、配置指南
MCHID = '1225312702';
这里填开户邮件中的商户号
APPID = 'wx426b3015555a46be';
这里填开户邮件中的(公众账号APPID或者应用APPID或者小程序APPID)
KEY = 'e10adc3949ba59abbe56e057f20f883e'
这里请使用商户平台登录账户和密码登录http://pay.weixin.qq.com 平台设置的“API密钥”,为了安全,请设置为32字符串。
APPSECRET = '01c6d59a3f9024db6336662ac95c8e74'
改参数在JSAPI支付(open平台账户不能进行JSAPI支付)的时候需要用来获取用户openid,可使用APPID对应的公众平台登录http://mp.weixin.qq.com的开发者中心获取AppSecret。小程序后台获取小程序的AppSecret。
四、效果
点击支付后,会弹出二维码,用相应的微信扫描二维码,即可完成支付。

如有任何问题可加入微信小程序QQ群(418177552)咨询

【微信小程序】支付过程详解的更多相关文章
- 微信支付之扫码、APP、小程序支付接入详解
做电商平台的小伙伴都知道,支付服务是必不可少的一部分,今天我们开始就说说支付服务的接入及实现.目前在国内,几乎90%中小公司的支付系统都离不开微信支付和支付宝支付.那么大家要思考了,为什么微信支付和支 ...
- 微信小程序开发之详解生命周期方法
生命周期是指一个小程序从创建到销毁的一系列过程 在小程序中 ,通过App()来注册一个小程序 ,通过Page()来注册一个页面 先来看一张小程序项目结构 从上图可以看出,根目录下面有包含了app.js ...
- 微信小程序的配置详解
1.配置详解: 使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.设置多 tab 等. 1>pages 接受一个数组,每一项都是字符串,来指定小 ...
- 微信小程序 生命周期函数详解
微信小程序 生命周期函数 小程序中 判断当前首页是从其他页面返回,还是由入口打开 由于小程序的数据在我们退出小程序时并没有得到释放,因此再次点击开来数据依然没有变成初始化 解决方法:在小程序 data ...
- 微信小程序开发者工具详解
一.微信小程序web开发工具下载地址 1.1 在微信公众平台-小程序里边去下载开发工具下载地址. 1.2 下载后安装一下就可以使用了: 二.创建项目 2.1 微信小程序web开发工具需要扫码登陆,所以 ...
- 微信小程序wxss样式详解
一.wxml 界面结构wxmL比较容易理解,主要是由八大类基础组件构成: 一.视图容器(View Container): 二.基础内容(Basic Content) 组件名 说明 组件名 说明 vie ...
- 微信小程序 Mustache语法详解
最近微信小程序非常火,对于前端开发的程序员是个利好的消息,这里主要记录下微信小程序 Mustache语法. 小程序开发的wxml里,用到了Mustache语法.所以,非常有必要把Mustache研究 ...
- 微信小程序页面传值详解
我们知道,在微信小程序中,从一个页面转到另一个页面,一般情况下可以通过navigate或redirect时候的url来携带参数,然后在目标页面的onLoad函数参数中获取这些url参数.例如: / ...
- 微信小程序的登陆流程详解
由于小程序的登陆和登陆状态维护流程比较复杂,需要客户端和服务器的数次交互以及服务器端的相应处理,很多同学都觉得比较麻烦,所以特别写下这篇博客为大家梳理一下微信的登陆流程,同时加深对微信小程序与登陆状态 ...
- 微信小程序生命周期详解
文章出处:https://blog.csdn.net/qq_29712995/article/details/79784222 在我看来小程序的生命周期虽然简单,但是他渗透了小程序开发的整个过程,对于 ...
随机推荐
- 算法笔记_100:蓝桥杯练习 算法提高 三个整数的排序(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 输入三个数,比较其大小,并从大到小输出. 输入格式 一行三个整数. 输出格式 一行三个整数,从大到小排序. 样例输入 33 88 77 样 ...
- 小程序数组合并concat
arr1=arr1.concat(arr2) 文章来源:刘俊涛的博客 地址:http://www.cnblogs.com/lovebing 欢迎关注,有问题一起学习欢迎留言.评论.
- SVN 常见命令
一.什么是SVN SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS. 二.SVN的下载安装 下载地址:http ...
- 理解Linux系统中的load average
理解Linux系统中的load average(图文版) 博客分类: Linux linux load nagios 一.什么是load average? linux系统中的Load对当前CPU工作 ...
- Ubuntu 如何切换到root账户
root账号问题 ubuntu默认禁用了root账号,所以当年试图使用su root命令切换到root用户时,尽管你已经输入了正确的密码,终端依旧会提示你密码错误.你需要执行以下命令解除root账号的 ...
- 《将一个字符串转换成datetime时,先分析该字符串以获取日期,然后再将每个变量放置到datetime对象中》的解决办法
我们在写代码时,稍不注意就收到VS那文不对题的错误提示. 最近在项目上碰到了“将一个字符串转换成datetime时,先分析该字符串以获取日期,然后再将每个变量放置到datetime对象中”的这个错误提 ...
- 【java设计模式】之 单例(Singleton)模式
1. 单例模式的定义 单例模式(Singleton Pattern)是一个比較简单的模式.其原始定义例如以下:Ensure a class has only one instance, and pro ...
- jquery cookie操作方法
1. 设置cookie的值,把name变量的值设为value $.cookie(’name’, ‘value’); 2.新建一个cookie 包括有效期 路径 域名等 $.cookie(’n ...
- 纹理mag filter不能取GL_XXX_MIPMAP_XXXX
今天遇到OpenGL error 0x0500错误,定位到 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magFilter); 查看ma ...
- 在Unity控制台下使用富文本
之前都不知道,最近看了csdn一位开发者的博文突然发现 <b>asd</b> <color="red">asd</color> &l ...