一起源码网

  • www.171739.xyz
  • 全球最大的互联网技术和资源下载平台
搜索
一起源码网 门户 高级进阶 查看主题

微信小程序支付(微信支付)文档(2016.11.25版本)

发布者: hujianhj | 发布时间: 2018-1-5 01:03| 查看数: 5798| 评论数: 1|帖子模式

支付模式

1、

刷卡支付

刷卡支付是用户展示微信钱包内的“刷卡条码/二维码”给商户系统扫描后直接完成支付的模式。主要应用线下面对面收银的场景。

2、

扫码支付

扫码支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。

3、

公众号支付

公众号支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。应用场景有:

  1. ◆ 用户在微信公众账号内进入商家公众号,打开某个主页面,完成支付
  2. ◆ 用户的好友在朋友圈、聊天窗口等分享商家页面连接,用户点击链接打开商家页面,完成支付
  3. ◆ 将商户页面转换成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付

4、

APP支付

APP支付又称移动端支付,是商户通过在移动端应用APP中集成开放SDK调起微信支付模块完成支付的模式。

5、

小程序支付

小程序支付,是商户在微信小程序平台内实现支付功能。

名词解释

1、

微信公众平台

微信公众平台是微信公众账号申请入口和管理后台。商户可以在公众平台提交基本资料、业务资料、财务资料申请开通微信支付功能。

平台入口:http://mp.weixin.qq.com

2、

微信开放平台

微信开放平台是商户APP接入微信支付开放接口的申请入口,通过此平台可申请微信APP支付。

平台入口:http://open.weixin.qq.com

3、

微信商户平台

微信商户平台是微信支付相关的商户功能集合,包括参数配置、支付数据查询与统计、在线退款、代金券或立减优惠运营等功能。

平台入口:http://pay.weixin.qq.com

4、

微信企业号

微信企业号是企业号的申请入口和管理后台,商户可以在企业号提交基本资料、业务资料、财务资料申请开通微信支付功能。

企业号入口:http://qy.weixin.qq.com

5、

微信支付系统

微信支付系统是指完成微信支付流程中涉及的API接口、后台业务处理系统、账务系统、回调通知等系统的总称。

6、

微信小程序

微信小程序是微信提供给商户实现APP的一种轻应用,开发起来简单,易用。

入口:https://mp.weixin.qq.com/debug/wxadoc/dev/

7、

商户后台系统

商户后台系统是商户后台处理业务系统的总称,例如:商户网站、收银系统、进销存系统、发货系统、客服系统等。

8、

商户证书

商户证书是微信提供的二进制文件,商户系统发起与微信支付后台服务器通信请求的时候,作为微信支付后台识别商户真实身份的凭据。

9、

签名

商户后台和微信支付后台根据相同的密钥和算法生成一个结果,用于校验双方身份合法性。签名的算法由微信支付制定并公开,常用的签名方式有:MD5、SHA1、SHA256、HMAC等。

10、

JSAPI网页支付

JSAPI网页支付即前文说的公众号支付,可在微信公众号、朋友圈、聊天会话中点击页面链接,或者用微信“扫一扫”扫描页面地址二维码在微信中打开商户HTML5页面,在页面内下单完成支付。

11、

支付密码

支付密码是用户开通微信支付时单独设置的密码,用于确认支付完成交易授权。该密码与微信登录密码不同。

12、

Openid

用户在小程序内的身份标识,不同小程序拥有不同的openid。商户后台系统通过登录授权、支付通知、查询订单等API可获取到用户的openid。主要用途是判断同一个用。可调用接口获取openid

支付账户

    小程序认证以后,可以在小程序后台,微信支付菜单栏,申请微信支付。

填写企业信息和对公账户,微信支付会打一笔随机金额到对公账户,输入金额完成验证后,在线签署迁移,即完成了微信支付的申请流程.。 微信支付申请完,会发送微信支付商户号,商户平台用户名密码等信息到注册者邮箱。此邮件包含开发时需要使用的支付账户信息,见图3.1所示。

图3.1 微信审核通过邮件模板

邮件中的账户参数与接口API参数对应关系见表格3.1:

表3.1 账户参数说明

邮件中参数API参数名详细说明
APPIDappidappid是微信小程序后台APP的唯一标识,在小程序后台申请小程序账号后,微信会自动分配对应的appid,用于标识该应用。可在小程序-->设置-->开发设置中查看。
微信支付商户号mch_id商户申请微信支付后,由微信支付分配的商户收款账号。
API密钥key交易过程生成签名的密钥,仅保留在商户系统和微信支付后台,不会在网络中传播。商户妥善保管该Key,切勿在网络中传输,不能在其他客户端中存储,保证key不会被泄漏。商户可根据邮件提示登录微信商户平台进行设置。也可按一下路径设置:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置
AppsecretsecretAppSecret是APPID对应的接口密码,用于获取接口调用凭证时使用。

协议规则

商户接入微信支付,调用API必须遵循以下规则:

表4.1 接口规则

传输方式为保证交易安全性,采用HTTPS传输
提交方式采用POST方法提交
数据格式提交和返回数据都为XML格式,根节点名为xml
字符编码统一采用UTF-8字符编码
签名算法MD5,后续会兼容SHA1、SHA256、HMAC等。
签名要求请求和接收数据均需要校验签名,详细方法请参考安全规范-签名算法
证书要求调用申请退款、撤销订单接口需要商户证书
判断逻辑先判断协议字段返回,再判断业务返回,最后判断交易状态

参数规定

1、body字段格式要求

 

 

使用场景支付模式商品字段规则样例备注
微信小程序小程序支付商家名称-销售商品类目罗辑思维-图书线上电商,商家名称必须为实际销售商品的商家

2、

交易金额

交易金额默认为人民币交易,接口中参数支付金额单位为【分】,参数值不能带小数。对账单中的交易金额单位为【元】。

外币交易的支付金额精确到币种的最小单位,参数值不能带小数点。

3、

交易类型

JSAPI--小程序支付统一下单接口trade_type的传参可参考这里

4、

货币类型

货币类型的取值列表:

CNY:人民币

5、

时间

标准北京时间,时区为东八区;如果商户的系统时间为非标准北京时间。参数值必须根据商户系统所在时区先换算成标准北京时间, 例如商户所在地为0时区的伦敦,当地时间为2014年11月11日0时0分0秒,换算成北京时间为2014年11月11日8时0分0秒。

6、

时间戳

标准北京时间,时区为东八区,自1970年1月1日 0点0分0秒以来的秒数。注意:部分系统取到的值为毫秒级,需要转换成秒(10位数字)。

7、

商户订单号

商户支付的订单号由商户自定义生成,微信支付要求商户订单号保持唯一性(建议根据当前系统时间加随机序列来生成订单号)。重新发起一笔支付要使用原订单号,避免重复支付;已支付过或已调用关单、撤销(请见后文的API列表)的订单号不能重新发起支付。

8、

银行类型

字符型银行编码银行名称
ICBC_DEBIT工商银行(借记卡)
ICBC_CREDIT工商银行(信用卡)
ABC_DEBIT农业银行(借记卡)
ABC_CREDIT农业银行(信用卡)
PSBC_DEBIT邮政储蓄银行(借记卡)
PSBC_CREDIT邮政储蓄银行(信用卡)
CCB_DEBIT建设银行(借记卡)
CCB_CREDIT建设银行(信用卡)
CMB_DEBIT招商银行(借记卡)
CMB_CREDIT招商银行(信用卡)
BOC_DEBIT中国银行(借记卡)
BOC_CREDIT中国银行(信用卡)
COMM_DEBIT交通银行(借记卡)
SPDB_DEBIT浦发银行(借记卡)
SPDB_CREDIT浦发银行(信用卡)
GDB_DEBIT广发银行(借记卡)
GDB_CREDIT广发银行(信用卡)
CMBC_DEBIT民生银行(借记卡)
CMBC_CREDIT民生银行(信用卡)
PAB_DEBIT平安银行(借记卡)
PAB_CREDIT平安银行(信用卡)
CEB_DEBIT光大银行(借记卡)
CEB_CREDIT光大银行(信用卡)
CIB_DEBIT兴业银行(借记卡)
CIB_CREDIT兴业银行(信用卡)
CITIC_DEBIT中信银行(借记卡)
CITIC_CREDIT中信银行(信用卡)
BOSH_DEBIT上海银行(借记卡)
BOSH_CREDIT上海银行(信用卡)
CRB_DEBIT华润银行(借记卡)
HZB_DEBIT杭州银行(借记卡)
HZB_CREDIT杭州银行(信用卡)
BSB_DEBIT包商银行(借记卡)
BSB_CREDIT包商银行(信用卡)
CQB_DEBIT重庆银行(借记卡)
SDEB_DEBIT顺德农商行(借记卡)
SZRCB_DEBIT深圳农商银行(借记卡)
HRBB_DEBIT哈尔滨银行(借记卡)
BOCD_DEBIT成都银行(借记卡)
GDNYB_DEBIT南粤银行(借记卡)
GDNYB_CREDIT南粤银行(信用卡)
GZCB_DEBIT广州银行(借记卡)
GZCB_CREDIT广州银行(信用卡)
JSB_DEBIT江苏银行(借记卡)
JSB_CREDIT江苏银行(信用卡)
NBCB_DEBIT宁波银行(借记卡)
NBCB_CREDIT宁波银行(信用卡)
NJCB_DEBIT南京银行(借记卡)
JZB_DEBIT晋中银行(借记卡)
KRCB_DEBIT昆山农商(借记卡)
LJB_DEBIT龙江银行(借记卡)
LNNX_DEBIT辽宁农信(借记卡)
LZB_DEBIT兰州银行(借记卡)
WRCB_DEBIT无锡农商(借记卡)
ZYB_DEBIT中原银行(借记卡)
ZJRCUB_DEBIT浙江农信(借记卡)
WZB_DEBIT温州银行(借记卡)
XAB_DEBIT西安银行(借记卡)
JXNXB_DEBIT江西农信(借记卡)
NCB_DEBIT宁波通商银行(借记卡)
NYCCB_DEBIT南阳村镇银行(借记卡)
NMGNX_DEBIT内蒙古农信(借记卡)
SXXH_DEBIT陕西信合(借记卡)
SRCB_CREDIT上海农商银行(信用卡)
SJB_DEBIT盛京银行(借记卡)
SDRCU_DEBIT山东农信(借记卡)
SRCB_DEBIT上海农商银行(借记卡)
SCNX_DEBIT四川农信(借记卡)
QLB_DEBIT齐鲁银行(借记卡)
QDCCB_DEBIT青岛银行(借记卡)
PZHCCB_DEBIT攀枝花银行(借记卡)
ZJTLCB_DEBIT浙江泰隆银行(借记卡)
TJBHB_DEBIT天津滨海农商行(借记卡)
WEB_DEBIT微众银行(借记卡)
YNRCCB_DEBIT云南农信(借记卡)
WFB_DEBIT潍坊银行(借记卡)
WHRC_DEBIT武汉农商行(借记卡)
ORDOSB_DEBIT鄂尔多斯银行(借记卡)
XJRCCB_DEBIT新疆农信银行(借记卡)
ORDOSB_CREDIT鄂尔多斯银行(信用卡)
CSRCB_DEBIT常熟农商银行(借记卡)
JSNX_DEBIT江苏农商行(借记卡)
GRCB_CREDIT广州农商银行(信用卡)
GLB_DEBIT桂林银行(借记卡)
GDRCU_DEBIT广东农信银行(借记卡)
GDHX_DEBIT广东华兴银行(借记卡)
FJNX_DEBIT福建农信银行(借记卡)
DYCCB_DEBIT德阳银行(借记卡)
DRCB_DEBIT东莞农商行(借记卡)
CZCB_DEBIT稠州银行(借记卡)
CZB_DEBIT浙商银行(借记卡)
CZB_CREDIT浙商银行(信用卡)
GRCB_DEBIT广州农商银行(借记卡)
CSCB_DEBIT长沙银行(借记卡)
CQRCB_DEBIT重庆农商银行(借记卡)
CBHB_DEBIT渤海银行(借记卡)
BOIMCB_DEBIT内蒙古银行(借记卡)
BOD_DEBIT东莞银行(借记卡)
BOD_CREDIT东莞银行(信用卡)
BOB_DEBIT北京银行(借记卡)
BNC_DEBIT江西银行(借记卡)
BJRCB_DEBIT北京农商行(借记卡)
AE_CREDITAE(信用卡)
GYCB_CREDIT贵阳银行(信用卡)
JSHB_DEBIT晋商银行(借记卡)
JRCB_DEBIT江阴农商行(借记卡)
JNRCB_DEBIT江南农商(借记卡)
JLNX_DEBIT吉林农信(借记卡)
JLB_DEBIT吉林银行(借记卡)
JJCCB_DEBIT九江银行(借记卡)
HXB_DEBIT华夏银行(借记卡)
HXB_CREDIT华夏银行(信用卡)
HUNNX_DEBIT湖南农信(借记卡)
HSB_DEBIT徽商银行(借记卡)
HSBC_DEBIT恒生银行(借记卡)
HRXJB_DEBIT华融湘江银行(借记卡)
HNNX_DEBIT河南农信(借记卡)
HKBEA_DEBIT东亚银行(借记卡)
HEBNX_DEBIT河北农信(借记卡)
HBNX_DEBIT湖北农信(借记卡)
HBNX_CREDIT湖北农信(信用卡)
GYCB_DEBIT贵阳银行(借记卡)
GSNX_DEBIT甘肃农信(借记卡)
JCB_CREDITJCB(信用卡)
MASTERCARD_CREDITMASTERCARD(信用卡)
VISA_CREDIT

安全规范

1、

签名算法------(签名校验工具)

签名生成的通用步骤如下:

第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。

特别注意以下重要规则:

  1. ◆ 参数名ASCII码从小到大排序(字典序);
  2. ◆ 如果参数的值为空不参与签名;
  3. ◆ 参数名区分大小写;
  4. ◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
  5. ◆ 微信接口可能增加字段,验证签名时必须支持增加的扩展字段

第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。

key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置

举例:

假设传送的参数如下:

appid: wxd930ea5d5a258f4f

mch_id: 10000100

device_info: 1000

body: test

nonce_str: ibuaiVcKdpRxkhJA

第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:

stringA="appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA";

第二步:拼接API密钥:

stringSignTemp="stringA&key=192006250b4c09247ec02edce69f6a2d"

sign=MD5(stringSignTemp).toUpperCase()="9A0A8659F005D6984697E2CA0A9CF3B7"

最终得到最终发送的数据:

wxd930ea5d5a258f4f

10000100

1000

test

ibuaiVcKdpRxkhJA

9A0A8659F005D6984697E2CA0A9CF3B7

2、

生成随机数算法

微信支付API接口协议中包含字段nonce_str,主要保证签名不可预测。我们推荐生成随机数算法如下:调用随机数函数生成,将得到的值转换为字符串。

3、

商户证书

(1)获取商户证书

微信支付接口中,涉及资金回滚的接口会使用到商户证书,包括退款、撤销接口。商家在申请微信支付成功后,收到的相应邮件后,可以按照指引下载API证书,也可以按照以下路径下载:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->证书下载 。证书文件有四个,分别说明如下:

表4.2:证书文件说明

证书附件描述使用场景备注
pkcs12格式
(apiclient_cert.p12、
包含了私钥信息的证书文件,为p12(pfx)格式,由微信支付签发给您用来标识和界定您的身份撤销、退款申请API中调用windows上可以直接双击导入系统,导入过程中会提示输入证书密码,证书密码默认为您的商户ID(如:10010000)
证书pem格式
(apiclient_cert.pem)
从apiclient_cert.p12中导出证书部分的文件,为pem格式,请妥善保管不要泄漏和被他人复制PHP等不能直接使用p12文件,而需要使用pem,为了方便您使用,已为您直接提供您也可以使用openssl命令来自己导出:openssl pkcs12 -clcerts -nokeys -in apiclient_cert.p12 -out apiclient_cert.pem
证书密钥pem格式
(apiclient_key.pem)
从apiclient_key.pem中导出密钥部分的文件,为pem格式PHP等不能直接使用p12文件,而需要使用pem,为了方便您使用,已为您直接提供您也可以使用openssl命令来自己导出:openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem
CA证书
(rootca.pem)
微信支付api服务器上也部署了证明微信支付身份的服务器证书,您在使用api进行调用时也需要验证所调用服务器及域名的真实性该文件为签署微信支付证书的权威机构的根证书,可以用来验证微信支付服务器证书的真实性部分工具已经内置了若干权威机构的根证书,无需引用该证书也可以正常进行验证,这里提供给您在未内置所必须根证书的环境中载入使用

(2)使用商户证书

  • ◆ apiclient_cert.p12是商户证书文件,除PHP外的开发均使用此证书文件。
  • ◆ 商户如果使用.NET环境开发,请确认Framework版本大于2.0,必须在操作系统上双击安装证书apiclient_cert.p12后才能被正常调用。
  • ◆ 商户证书调用或安装都需要使用到密码,该密码的值为微信商户号(mch_id)
  • ◆ PHP开发环境请使用商户证书文件apiclient_cert.pem和apiclient_key.pem ,rootca.pem是CA证书。

各版本的调用实例请参考微信支付提供的Demo外链


(3)商户证书安全

证书文件不能放在web服务器虚拟目录,应放在有访问权限控制的目录中,防止被他人下载。商户服务器要做好病毒和木马防护工作,不被非法侵入者窃取证书文件。

4、

商户回调API安全

在普通的网络环境下,HTTP请求存在DNS劫持、运营商插入广告、数据被窃取,正常数据被修改等安全风险。商户回调接口使用HTTPS协议可以保证数据传输的安全性。所以微信支付建议商户提供给微信支付的各种回调采用HTTPS协议。请参考:HTTPS搭建指南


小程序支付开发步骤

如果开发者已做过JSAPI或JSSDK调起微信支付,接入小程序支付非常相似,以下是三种接入方式的对比:

 

对比栏目
JSAPIJSSDK小程序
统一下单都需要先获取到Openid,调用相同的API
调起数据签名五个字段参与签名(区分大小写):appId,nonceStr,package,signType,timeStamp
调起支付页面协议HTTP或HTTPSHTTP或HTTPSHTTPS
支付目录
授权域名
回调函数success回调complete、fail、success回调函数

程序访问商户服务都是通过HTTPS,开发部署的时候需要安装HTTPS服务器

业务流程

业务流程时序图

小程序支付的交互图如下:

商户系统和微信支付系统主要交互:

1、小程序内调用登录接口,获取到用户的openid,api参见公共api【小程序登录API

2、商户server调用支付统一下单,api参见公共api【统一下单API

3、商户server调用再次签名,api参见公共api【再次签名

4、商户server接收支付通知,api参见公共api【支付结果通知API

5、商户server查询支付结果,api参见公共api【查询订单API

小程序调起支付API

小程序调起支付数据签名字段列表:

字段名变量名必填类型示例值描述
小程序IDappIdStringwxd678efh567hg6787微信分配的小程序ID
时间戳timeStampString1230000109时间戳从1970年1月1日00:00:00至今的秒数,即当前的时间
随机串nonceStrString5K8264ILTKCH16CQ2502SI8ZNMTM67VS随机字符串,不长于32位。推荐随机数生成算法
数据包packageStringrepay_id=12312333333333333统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=*
签名方式signTypeStringMD5签名算法,暂支持 MD5

 

 

调用wx.requestPayment(OBJECT)发起微信支付

Object参数说明:
参数类型必填说明
timeStampDateInt时间戳从1970年1月1日00:00:00至今的秒数,即当前的时间
nonceStrString随机字符串,长度为32个字符以下。
packageString统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=*
signTypeString签名算法,暂支持 MD5
paySignString签名,具体签名方案参见微信公众号支付帮助文档;
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)

示例代码:


{

    'timeStamp': '',

    'nonceStr': '',

    'package': '',

    'signType': 'MD5',

    'paySign': '',

    'success':function(res){},

    'fail':function(res){}

})


最新评论

逆向开发☆斯博 发表于 2022-5-8 07:51
php网站源码完整

一起源码让程序更轻更快

www.171739.xyz

工作时间 周一至周六 8:00-17:30

侵权处理

客服QQ点击咨询

关注抖音号

定期抽VIP

Copyright © 2016-2021 https://www.171739.xyz/ 滇ICP备13200218号

快速回复 返回顶部 返回列表