微信支付接口开发的安全规范

原创 2017年06月13日 17:18:22

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"

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

<xml>

<appid>wxd930ea5d5a258f4f</appid>

<mch_id>10000100</mch_id>

<device_info>1000<device_info>

<body>test</body>

<nonce_str>ibuaiVcKdpRxkhJA</nonce_str>

<sign>9A0A8659F005D6984697E2CA0A9CF3B7</sign>

</xml>

2、

生成随机数算法

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

3、

商户证书

(1)获取商户证书

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

表4.2:证书文件说明

证书附件 描述 使用场景 备注
pkcs12格式
(apiclient_cert.p12、
包含了私钥信息的证书文件,为p12(pfx)格式,由微信支付签发给您用来标识和界定您的身份 撤销、退款申请API中调用 windows上可以直接双击导入系统,导入过程中会提示输入证书密码,证书密码默认为您的商户ID(如:10010000)

以下两个证书在PHP环境中使用:

证书附件 描述 使用场景 备注
CA证书
(rootca.pem)
微信支付api服务器上也部署了证明微信支付身份的服务器证书,您在使用api进行调用时也需要验证所调用服务器及域名的真实性 该文件为签署微信支付证书的权威机构的根证书,可以用来验证微信支付服务器证书的真实性 部分工具已经内置了若干权威机构的根证书,无需引用该证书也可以正常进行验证,这里提供给您在未内置所必须根证书的环境中载入使用
证书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

(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搭建指南

本人提供微信、支付宝的银行接口通道,QQ932636688/电话17605918869

说明:通过银行连微信、支付宝可以更低费率,可以用法人对私账户结算,优势多多

接口类型:扫码、公众号、APP、H5等

版权声明:银行支付通道(微信支付宝扫码、H5、APP),可对私结算,D+1,费率低,联系QQ932636688

关于Android集成微信支付的过程

本来是不打算写关于微信支付的,网上有太多了,但是前些天一个哥们居然还问我微信支付怎么集成,所以准备做个记录。 以下内容是将微信支付的所有过程都放在在app端,这是不推荐的,实际中前几步由服务器来做比...
  • yuanlvmao
  • yuanlvmao
  • 2016年08月06日 15:48
  • 2142

微信支付快速集成

参考资料:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5资料下载:https://open.weixin.qq.com/c...
  • u010378579
  • u010378579
  • 2017年02月25日 11:42
  • 608

微信支付web开发遇到的一些坑

一、本地环境支付测试需要外网      方法1、ngrok 内网穿透工具,由于ngrok是国外产品,访问比较慢,建议使用NATAPP(基于ngrok高速内网穿透的服务)https://natapp.c...
  • u010286751
  • u010286751
  • 2016年08月02日 22:25
  • 2157

Android接入微信支付完全解析,太全了

转自:http://www.jianshu.com/p/1a17622c9f48 今天来聊聊,android中接入微信支付的需求,肯定有人会说,这多简单呀,还在这里扯什么,赶快去洗洗...
  • gf771115
  • gf771115
  • 2017年05月02日 21:18
  • 4363

Android微信支付功能集成【全攻略】

Android版微信支付官方文档和Demo问题很多,官方也没有及时更新和细化开发集成文档。 这里分享我集成Android客户端微信支付的思路和部分代码。希望对大家有帮助。 遇到的问题无非以下几种:...
  • jay100500
  • jay100500
  • 2016年10月28日 14:30
  • 4234

微信支付接口开发实例

  • 2017年12月27日 16:20
  • 129KB
  • 下载

PHP微信支付接口开发代码

  • 2016年03月06日 11:03
  • 9KB
  • 下载

Java微信开发之公众号支付接口

1、设置支付路径使用微信公众号支付接口,必须在微信公众号管理后台中设置支付路径。这个微信接口文档说得很清楚,请参考:https://pay.weixin.qq.com/wiki/doc/api/jsa...
  • p_3er
  • p_3er
  • 2015年11月18日 14:41
  • 24749

微信H5支付接口开发步骤

接口流程图 1、用户在商户侧完成下单,使用微信支付进行支付 2、由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB 3、统一下单接口返回支付相关参数给商户...
  • paymm
  • paymm
  • 2017年06月13日 17:11
  • 10777

PHP开发APP微信支付接口

【准备工作】 在准备着手开发之前呢,我建议大家先去查阅一下微信的 APP支付开发者文档 ,对微信支付开发的流程有一个系统的了解。 我这里为大家准备了一张交互时序图,以便大家随时查看: A...
  • qq_36031452
  • qq_36031452
  • 2017年03月10日 09:35
  • 200
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:微信支付接口开发的安全规范
举报原因:
原因补充:

(最多只允许输入30个字)