SDK和开发工具
更新时间:2023.04.28为了便于开发者使用国密,微信支付提供了 Java SDK 和一系列开发工具。
# Java SDK
微信支付 Java SDK(wechatpay-java (opens new window))已支持国密。
# 安装
# Gradle 项目
在你的构建文件中加入以下依赖
1implementation 'com.github.wechatpay-apiv3:wechatpay-java:0.2.1'2implementation 'com.github.wechatpay-apiv3:wechatpay-java-shangmi:0.2.1'
# Maven 项目
在你的 POM 文件中加入以下依赖
1<dependency>2 <groupId>com.github.wechatpay-apiv3</groupId>3 <artifactId>wechatpay-java</artifactId>4 <version>0.2.1</version>5</dependency>6<dependency>7 <groupId>com.github.wechatpay-apiv3</groupId>8 <artifactId>wechatpay-java-shangmi</artifactId>9 <version>0.2.1</version>10</dependency>
# 示例代码
先使用 SMConfig
初始化具体的业务服务,再调用服务提供的业务接口。国密的签名、验签会注入请求的各个环节。
1package com.wechat.pay.java.service;23import com.wechat.pay.java.core.Config;4import com.wechat.pay.java.shangmi.SMConfig;5import com.wechat.pay.java.service.payments.jsapi.JsapiService;6import com.wechat.pay.java.service.payments.jsapi.model.QueryOrderByIdRequest;7import com.wechat.pay.java.service.payments.model.Transaction;8910public class QuickStart {1112 /** 商户号 */13 public static String merchantId = "";14 /** 国密的商户API私钥路径 */15 public static String privateKeyPath = "";16 /** 国密的商户API证书序列号 */17 public static String merchantSerialNumber = "";18 /** 国密的微信支付平台证书路径 */19 public static String wechatPayCertificatePath = "";20 /** 微信支付 APIv3 密钥 */21 public static String apiV3Key = "";2223 public static void main(String[] args) {24 Config config =25 new SMConfig.Builder()26 .merchantId(merchantId)27 .privateKeyFromPath(privateKeyPath)28 .merchantSerialNumber(merchantSerialNumber)29 .addWechatPayCertificateFromPath(wechatPayCertificatePath)30 .build();31 JsapiService service = new JsapiService.Builder().config(config).build();32 QueryOrderByIdRequest request = new QueryOrderByIdRequest();33 // 设置业务参数34 request.setMchid("****");35 request.setTransactionId("420***");36 Transaction transaction = service.queryOrderById(request);37 }38}
更多信息请参考 shangmi/README.md (opens new window)。
# Postman 脚本
微信支付 APIv3 Postman 脚本 (opens new window) 已支持国密。
你可以
并参考 国密-商户参数模版 (opens new window) 在环境变量中设置参数
shangmi
:值为true
。mchid
:必填,商户号。merchant_serial_no
:必填,商户 API 证书序列号。apiclient_key.pem
:必填,PEM 格式的商户 API 私钥。pubkey.pem
:必填,PEM 格式的商户 API 国密公钥。
这样便能使用 Postman 发送国密请求了。你不用自行计算签名,脚本会使用国密 SM2 计算签名。
# 国密工具
我们提供了签名验签和加解密工具,供商户进行本地验证 SM2/SM3/SM4 的计算结果。下载地址如下:
# 如何从 PEM 文件导出16进制的密钥
国密工具只接收16进制的私钥和公钥。PKCS8 编码的国密私钥 PEM 文件,包含了私钥和公钥。我们需从中提取16进制的私钥和公钥。
openssl 1.1.1 支持了国密私钥证书,我们可以使用它解析私钥 PEM 文件。
1➜ openssl ec -in apiclient_key.pem -text -noout2read EC key3Private-Key: (256 bit)4priv:5 fd:4f:52:6b:3e:5c:78:31:90:84:50:4c:7f:f7:07:6 22:1d:be:ab:92:f3:be:1a:db:f0:bd:92:23:8b:0f:7 51:1f8pub:9 04:7b:cd:47:f7:5e:a1:9d:04:c0:a7:2b:4d:a7:0f:10 57:dd:1b:3f:93:37:cc:5d:d1:24:18:81:b9:13:43:11 19:39:bf:69:a5:5e:f6:b4:67:10:c7:e1:72:45:23:12 d0:f6:46:dd:69:4d:24:83:97:6f:6e:85:0d:46:63:13 78:fa:8b:2f:7e14ASN1 OID: SM2
如图所见,priv 为16进制私钥,pub 为16进制公钥。
文档是否有帮助