微信支付平台技术文档的一个小坑

一、注意服务器的时间与微信接口是否相同,如时间不同接口也不通即使是0.1秒

二、调用支付相关接口需要加载私钥,和证书两个认证文件,官网文档给了java和php两个demo,逻辑应该是一样的,但实际却走了两个逻辑,加载私钥过程php和java是一样的。加载证书java是需要实时下载(个人认为没必要每次使用平台接口都要先去下载证书,因为平台有说明证书有效期是5年),php版demo就很简单想加载私钥一样直接加载事先下载好的证书。减少了不必要的通信,同时也减少了通信失败的可能。

java版demo

public void setup() throws IOException {
    // 加载商户私钥(privateKey:私钥字符串)
    PrivateKey merchantPrivateKey = PemUtil
            .loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes("utf-8")));
 
    // 加载平台证书(mchId:商户号,mchSerialNo:商户证书序列号,apiV3Key:V3密钥)这步会去下载证书,不同于php版
    AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(
            new WechatPay2Credentials(mchId, new PrivateKeySigner(mchSerialNo, merchantPrivateKey)),apiV3Key.getBytes("utf-8"));

    /* //实际可以像加载私钥一样直接加载证书
    X509Certificate wechatpayCertificate = PemUtil
        .loadCertificate(new ByteArrayInputStream(certificate.getBytes("utf-8")));
    */ 

    // 初始化httpClient
    httpClient = WechatPayHttpClientBuilder.create()
            .withMerchant(mchId, mchSerialNo, merchantPrivateKey)
            .withValidator(new WechatPay2Validator(verifier)).build();
}

php版demo

// 商户相关配置,
$merchantId = '1000100'; // 商户号
$merchantSerialNumber = 'XXXXXXXXXX'; // 商户API证书序列号
$merchantPrivateKey = PemUtil::loadPrivateKey('./path/to/mch/private/key.pem'); // 私钥 

$wechatpayCertificate = PemUtil::loadCertificate('./path/to/wechatpay/cert.pem'); // 证书
 
// 构造一个WechatPayMiddleware
$wechatpayMiddleware = WechatPayMiddleware::builder()
    ->withMerchant($merchantId, $merchantSerialNumber, $merchantPrivateKey) // 传入商户相关配置
    ->withWechatPay([ $wechatpayCertificate ]) // 可传入多个微信支付平台证书,参数类型为array
    ->build();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值