`
usenrong
  • 浏览: 514949 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

微信卡券卡包支付及红包发放系统HTTPS双向认证

    博客分类:
  • J2EE
阅读更多

 

现在邮件发出的文件有四个,分别是apiclient_cert.p12apiclient_cert.pemapiclient_key.pemrootca.pem

apiclient_cert.p12
包含了私钥信息的证书文件,为p12(pfx)格式,由微信支付签发给您用来标识和界定您的身份,请妥善保管不要泄漏和被他人复制
部分安全性要求较高的API需要使用该证书来确认您的调用身份
windows
上可以直接双击导入系统,导入过程中会提示输入证书密码,证书密码默认为您的商户ID(如:10010000

apiclient_cert.pem
apiclient_cert.p12中导出证书部分的文件,为pem格式,请妥善保管不要泄漏和被他人复制
部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供;您也可以使用openssl命令来自己导出:openssl pkcs12 -clcerts -nokeys -in apiclient_cert.p12 -out apiclient_cert.pem

apiclient_key.pem
apiclient_cert.p12中导出密钥部分的文件,为pem格式,请妥善保管不要泄漏和被他人复制
部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供;您也可以使用openssl命令来自己导出:openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem

rootca.pem
微信支付api服务器上也部署了证明微信支付身份的服务器证书,您在使用api进行调用时也需要验证所调用服务器及域名的真实性,该文件为签署微信支付证书的权威机构的根证书,可以用来验证微信支付服务器证书的真实性
某些环境和工具已经内置了若干权威机构的根证书,无需引用该证书也可以正常进行验证,这里提供给您在未内置所必须根证书的环境中载入使用

 

 

 

https双向认证上述文件使用说明:

 

问:什么是双向认证?

 

答:双向认真顾名思义,就是指服务器与客户端进行通信的时候,两者相互进行签名校验,以确保双方身份,映射到上述四个文件,既服务器验证客户端的时候通过客户端证书和签名(既:apiclient_cert.p12 或者 apiclient_cert.pemapiclient_key.pem),客户端验证服务器通过ca的根证书进行(rootca.pem),根证书有些操作系统上或者开发环境中已经包含,此时不需要导入,但如果找不到跟证书时则需要使用rootca.pem

 

 

 

<!--[if !supportLists]-->1、<!--[endif]-->如果基于curl调用https访问接口,(如:c++php等语言使用libcurl访问)

 

需要使用到上述的piclient_cert.pemapiclient_key.pem文件,当找不到ca根证书的时候还需要rootca.pem文件。

 

使用如下:(phpc++类似)

 

 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);

 

 curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false)

 

 curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/apiclient_cert.pem);

 

 curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'/apiclient_key.pem');

 

 curl_setopt($ch,CURLOPT_CAINFO,'rootca.pem');

 

 

 

<!--[if !supportLists]-->2、<!--[endif]-->JAVA使用证书文件

 

JAVA只需要使用apiclient_cert.p12即可,如果使用JAVA语言进行开发的可以忽略其余三个pem格式的文件。

 

使用如下:

 

//指定读取证书格式为PKCS12
KeyStore keyStore = KeyStore.getInstance("PKCS12");
//
读取本机存放的PKCS12证书文件
FileInputStream instream = new FileInputStream(new File("D:/apiclient_cert.p12"));
try {
//
指定PKCS12的密码(商户ID)
keyStore.load(instream, "10010000".toCharArray());
} finally {
instream.close();
}
SSLContext sslcontext = SSLContexts.custom()
.loadKeyMaterial(keyStore, "10010000".toCharArray()).build();
//
指定TLS版本
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslcontext,new String[] { "TLSv1" },null,
SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
//
设置httpclientSSLSocketFactory
CloseableHttpClient httpclient = HttpClients.custom()
.setSSLSocketFactory(sslsf)
.build();

 

 

 

<!--[if !supportLists]-->3、<!--[endif]-->C#使用证书

 

C#使用证书默认使用操作系统以导入的证书,即在操作系统上按装apiclient_cert.p12即可。C#也可以忽略其他三个pem文件。

 

使用如下:

 

string cert = @"R:\apiclient_cert.p12";
string password = "10010000";
ServicePointManager.ServerCertificateValidationCallback=new RemoteCertificateValidationCallback(CheckValidationResult);
X509Certificate cer = new X509Certificate(cert, password);
HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url);
webrequest.ClientCertificates.Add(cer);
webrequest.Method = "post";
HttpWebResponse webreponse = (HttpWebResponse)webrequest.GetResponse();
Stream stream = webreponse.GetResponseStream();

/*CheckValidationResult
的定义*/
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
if (errors == SslPolicyErrors.None)
return true;
return false;
}

 

注意:C#有一点需要注意,除了在代码中使用apiclient_cert.p12之外还需要将该证书导入操作系统才能使用,1、代码中使用、;2、导入操作系统,二者缺一不可。.NET版本需要大于2.0

 

分享到:
评论

相关推荐

    JAVA微信卡券及代理模式退款

    - **微信支付API**:企业需要调用微信的API接口来生成、发放和核销卡券。这包括获取商户凭证、创建卡券、添加到用户的卡包以及在消费时验证卡券的有效性。 - **微信开放平台**:企业需要注册成为微信开放平台的...

    微信卡券小程序领券示例wechatAddCardTest-master.zip

    11. **微信支付集成**:虽然领券示例可能不涉及支付,但微信卡券常常与支付场景结合,如满减优惠券。理解如何集成微信支付(`wx.requestPayment`)也是扩展功能时的必备知识。 以上就是关于“微信卡券小程序领券...

    微信卡券商户授权函(第三方代制模式).docx

    微信卡券商户授权函(第三方代制模式).docx

    Wechat-Card:微信卡券接口SDK-Demo

    微信卡券接口SDK-Demo是基于2018年07月07日微信官方文档的一个实例项目,主要目标是帮助开发者快速理解和实现微信卡券功能。本文将深入讲解这个Demo中的关键知识点,并探讨如何利用Java进行微信卡券接口的调用。 1....

    微信卡券接口

    微信卡券接口,内含安卓,苹果SDK源码,以及接口文档新增说明

    微信卡券接口文档V1.8 Beta

    - **基础概念**:创建卡券接口是整个微信卡券系统的核心之一,用于创建新的卡券类型并获取`card_id`。 - **审核流程**:创建的卡券需要经过微信平台的审核,通常不超过3个工作日,审核通过后才能正式使用。 - **库存...

    微信卡包接口资料整理

    微信卡券、门店开发文档以及代码是实例整理,方便开发。

    新微信开发工具包(微信服务号+微信企业号+微信小程序+微信支付+支付宝支付)

    【新】微信开发工具包(微信服务号+微信企业号+...微信支付(账单、卡券、红包、退款、转账、App支付、JSAPI支付、Web支付、扫码支付等)。支付宝支付(账单、转账、App支付、刷卡支付、扫码支付、Web支付、Wap支付等)

    【新】微信开发工具包源代码(微信服务号+微信企业号+微信小程序+微信支付+支付宝支付)

    ... ... WeChatDeveloper 针对 access_token 失效... 微信支付(账单、卡券、红包、退款、转账、App支付、JSAPI支付、Web支付、扫码支付等) 支付宝支付(账单、转账、App支付、刷卡支付、扫码支付、Web支付、Wap支付等)

    微信公号号之微信卡券功能(小程序新增能力)

    1、微信卡券功能展示 点击卡包 (此图片来源于网络,如有侵权,请联系删除! ) 点击卡包 点击我的票卷 (此图片来源于网络,如有侵权,请联系删除! ) 点击我的票卷 微信卡卷展示 (此图片来源于网络,如有侵权,请联系...

    微信开发工具包(微信服务号+微信企业号+微信小程序+微信支付+支付宝支付)

    微信支付(账单、卡券、红包、退款、转账、App支付、JSAPI支付、Web支付、扫码支付等)。支付宝支付(账单、转账、App支付、刷卡支付、扫码支付、Web支付、Wap支付等。WeChatDeveloper 是基于 wechat-php-sdk 重构,...

    最新微信收银系统程序(刷卡支付、卡券核销、扫码支付、固定金额二维码收款).zip

    1. 刷卡支付:在传统收银系统的基础上,微信收银系统支持银行卡刷卡支付,顾客可以通过自己的信用卡或借记卡完成交易,使得没有微信支付或者现金的顾客也能顺利完成购物。 2. 卡券核销:微信收银系统与微信平台紧密...

    【PHP新】微信服务号+微信小程序+微信支付+支付宝支付

    微信小程序,服务端接口支持 ...微信支付(账单、卡券、红包、退款、转账、App支付、JSAPI支付、Web支付、扫码支付等) 支付宝支付(账单、转账、App支付、刷卡支付、扫码支付、Web支付、Wap支付等)

    微信企业卡券文档和Demo

    微信企业卡券文档和Demo

    php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)

    内容有:微信摇一摇接口/微信多客服接口/微信支付接口/微信红包接口/微信卡券接口/微信小店接口/JSAPI &lt;?php class WxApi { const appId = ""; const appSecret = ""; const mchid = ""; //商户号 const ...

    微信小程序卡券开发(亲测)

    提示:小程序卡券和公众平台调用基本一致,请先查看公众平台卡券文档 一、公众帐号/小程序绑定 由于微信卡券用的是一套逻辑。所以小程序需要先和公众账号绑定,才能在小程序中调起公众平台卡券 登录微信公众平台:h ...

    公众号模块 商家联盟卡券汇v2.0.5功能模块

    运营亮点: 1.激起用户领券,鼓舞用户同享,进步实践转化,...二、核销:由所以原生卡券,支撑一切微信卡券的核销方式,手机端用微信卡券核销辅佐,其他在后台制造的卡券,更加便利核销(打开微信扫一扫就可以核销掉)

    微信jssdk-demo

    使用JSSDK主要包括 ...12、微信支付(服务号必须通过微信认证) 作者:Javen205 链接:http://www.jianshu.com/p/bb88f7520b9e 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    微信小程序开发-优惠券卡卷案例源码.zip

    微信小程序是一种轻量级的应用开发平台,主要针对移动端,由腾讯公司推出,旨在提供便捷的、无需下载安装即可使用的应用服务。在这个“微信小程序开发-优惠券卡卷案例源码.zip”压缩包中,包含了一个关于如何在微信...

    微信线下扫码支付.pdf

    【微信线下扫码支付】是一种移动支付方式,主要应用于实体店零售场景,通过微信服务号与支付功能结合,使得消费者可以通过扫描二维码快速...随着市场的竞争加剧,智能支付系统的应用将更加广泛,为商家带来更多的商机。

Global site tag (gtag.js) - Google Analytics