微信支付超级详细配图讲解——1(基本配置的获取和密钥讲解)

名词解释:

  • 商户API证书,是用来证实商户身份的。证书中包含商户号、证书序列号、证书有效期等信息,由证书授权机构(Certificate Authority ,简称CA)签发,以防证书被伪造或篡改。如何获取请见商户API证书
  • 商户API私钥。商户申请商户API证书时,会生成商户私钥,并保存在本地证书文件夹的文件apiclient_key.pem中。注:不要把私钥文件暴露在公共场合,如上传到Github,写在客户端代码等。
  • 微信支付平台证书。平台证书是指由微信支付负责申请的,包含微信支付平台标识、公钥信息的证书。商户可以使用平台证书中的公钥进行应答签名的验证。获取平台证书需通过获取平台证书列表接口下载。
  • 证书序列号。每个证书都有一个由CA颁发的唯一编号,即证书序列号。如何查看证书序列号请看这里
  • API v3密钥。为了保证安全性,微信支付在回调通知和平台证书下载接口中,对关键信息进行了AES-256-GCM加密。API v3密钥是加密时使用的对称密钥。商户可以在【商户平台】->【API安全】的页面设置该密钥。

微信支付一般需要四个基本配置信息 :1.商户号 2.APPId 3.AppSecret 4.密钥key (通过商户证书获取) 5. 微信平台证书 (含有微信公钥) 6.证书序列号.  7.

商户号MCH_ID_USER 的获取

先在商户平台 微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式(就相当于你的商户账户的管理平台)中注册认证你的微信

登录后的样子是这样的。 然后点击账户中心

可以看到登录账号 。 他就是你的商户号

AppId和AppSecret 的获取

打开 AppID及其主体信息查询指引

里面会告诉你到相应的平台去申请。比如公众号(服务号和订阅号)、小程序, 就在

微信公众平台【mp.weixin.qq.com】

注册登录(如果是第一次,就需要进行认证信息什么的)。然后点开 设置与开发->开发->基本配置->就可以获取基本信息了。如下图:

我们就可以看到AppID了

微信开放平台 微信开放平台

移动应用(app)等在这申请。同样是先注册,然后登录。

然后点开管理中心,点开创建应用,就可以为你的app进行申请,成功后就有对应appid了 。

到此,我们就可以获取APPID和APPSecret了。

将申请获得的appid进行关联

点击关联APPID,把微信开放平台获取的appid填入,然后确认,进行关联。

然后登录微信开放平台,在消息中心中同意关联即可。

目录

微信支付一般需要四个基本配置信息 :1.商户号 2.APPId 3.AppSecret 4.密钥key (通过商户证书获取) 5. 微信平台证书 (含有微信公钥) 6.证书序列号.  7.

商户号MCH_ID_USER 的获取

AppId和AppSecret 的获取

微信公众平台【mp.weixin.qq.com】

微信开放平台 微信开放平台

将申请获得的appid进行关联

API证书管理(商户证书)

申请API证书

有两种证书,一个是我们上面申请到的我们自己的证书,里面包含有我们商户的私钥等信息。 一般都是通过以下方式来获取。

还有一种是微信平台的证书,里面含有微信平台的公钥等信息,我们直接通过以下方法配置进行了,其实就是把那个微信提供的地址写上去就好了。

设置API,APIV3密钥 (都是对称加密)

商户API证书序列号,申请证书后就有对应的。

对称加密 (常用AES算法)

非对称加密(常用RSA算法)

身份认证

公钥加密,私钥解密

私钥加密,公钥解密

数字签名

加签

验签

数字证书

微信平台证书

GET 获取平台证书列表


API证书管理(商户证书)

申请API证书

点开申请新证书,然后下载证书工具,填入商户号和商户名称,然后根据步骤,获取证书解压到文件夹中。 

 

有两种证书,一个是我们上面申请到的我们自己的证书,里面包含有我们商户的私钥等信息。 一般都是通过以下方式来获取。

商户申请商户API证书时,会生成商户私钥,并保存在本地证书文件夹的文件apiclient_key.pem中。商户开发者可以使用方法PemUtil.loadPrivateKey()加载证书。

# 示例:私钥存储在文件
PrivateKey merchantPrivateKey = PemUtil.loadPrivateKey(
        new FileInputStream("存放路径"));

还有一种是微信平台的证书,里面含有微信平台的公钥等信息

https://api.mch.weixin.qq.com/v3/certificates

获取平台证书

你可以使用WechatPayHttpClientBuilder构造的HttpClient发送请求和应答了。

URIBuilder uriBuilder = new URIBuilder("https://api.mch.weixin.qq.com/v3/certificates");
HttpGet httpGet = new HttpGet(uriBuilder.build());
httpGet.addHeader("Accept", "application/json");

CloseableHttpResponse response = httpClient.execute(httpGet);

String bodyAsString = EntityUtils.toString(response.getEntity());
System.out.println(bodyAsString);

那么我们拿到商户私钥公钥和 微信平台的公钥,有什么用呢? 可以用于请求和发送的加密和解密。如下图。 至于下图具体的代码实现及作用,我在第二篇文章有详细的介绍微信支付V3——2。请看完这一篇在去看下一篇比较好。

设置API,APIV3密钥 (都是对称加密)

APIV3的作用:就像上面的图片第3步和第5步一样,对于比较重要的东西,我们可以用私钥来加密,公钥来解密。但是对于大量信息的传输,如果我们还用非对称加密的方式,就会大大的降低传输速率。所以对于大量信息的传输,我们使用对称加密的方法,也就是加密和解密都用一样的公钥。  微信回调中   “回调报文解密“”    会用到这个APIV3密钥。后面会讲。

商户API证书序列号,申请证书后就有对应的。

作用:微信会根据序列号找到我们对应的证书,从证书中解密出我们的公钥,对我们的请求进行验签。

 

对称加密 (常用AES算法)

只使用一个密钥,密钥必须保密,去加密解密。

优点:速度快。 缺点:容易被破解

非对称加密(常用RSA算法)

就是有公钥加密,私钥解密。或者私钥解密,公钥解密。

优点:安全性高   。缺点:速度慢

一般把他们混合使用。

身份认证

公钥加密,私钥解密

A把自己的公钥给B、C、D等等 ,这样B、C、D就可以各自写内容给A,然后用A给的公钥进行加密再发送给A。 然后只有A自己的私钥才能够解密获取其中的内容。 反之 ,B、C、D等等也可以这样干。

私钥加密,公钥解密

A用自己的私钥把内容进行加密。 那样B、C、D 用A的公钥进行解密,如果能成功,说明内容来自A。 这样也可以证明这内容来自A了。

数字签名

检测数据有没有被篡改,需要进行 摘要运算+私钥 =数字签名

加签

A 的"内容" 通过" 摘要算法" 获得 “ 摘要 ” 。然后 A再用 "私钥" 将这个 “摘要” 进行加密 ,得到一个数字签名后的内容,给B。

验签

B拿到那个加密后的内容(原文内容和加密后的摘要)后,先用A的"公钥" 把 加密后的摘要给解密 ,获得(摘要1)。 然后B在用与A相同的摘要算法,对原文内容进行摘要运算,得到(摘要2)。 对比摘要1和摘要2 ,如果一样,就说明内容没有被篡改.

摘要算法主要有: MD5, SHA1,SHA2等。

数字证书

理由:因为公钥可能会被黑客伪造。不能直接分发公钥,公钥的分发必须使用数字证书,数字证书由CA颁发  。

说明:所谓数字证书也就是把我们的公钥交给第三方信得过的机构CA,然后CA来验证分发。

http+数字证书 =https  

微信平台证书


GET 获取平台证书列表

https://api.mch.weixin.qq.com/v3/certificates

作用:微信平台证书中含有微信平台的公钥等信息,用于加密解密等

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值