openssl pkcs12 -in apiclient_cert.p12 -out apiclient_cert.pem -nodes
密码是:商户id

https://github.com/wechatpay-apiv3/CertificateDownloader



https://github.com/wechatpay-apiv3/wechatpay-apache-httpclient
- <dependency>
-
- <groupId>com.github.wechatpay-apiv3</groupId>
-
- <artifactId>wechatpay-apache-httpclient</artifactId>
-
- <version>0.2.2</version>
-
- </dependency>

- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fasterxml.jackson.databind.node.ObjectNode;
- import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
- import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
- import org.apache.http.client.methods.CloseableHttpResponse;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.entity.StringEntity;
- import org.apache.http.impl.client.CloseableHttpClient;
- import org.apache.http.util.EntityUtils;
-
- import java.io.ByteArrayOutputStream;
- import java.io.FileInputStream;
- import java.security.cert.X509Certificate;
- import java.util.ArrayList;
- import java.util.List;
-
- public class test {
-
-
- public static void main(String[] args) throws Exception {
- String apiV3key = "SYKJ20234545weasdq";
- // 商户号
- String mchId = "150923821451";
- // 商户证书序列号
- String mchSerialNo = "79D9A85662A93453457720657B19";
- // 商户私钥
- String mchPrivateKeyFilePath = "D:\\可删除\\apiclient_cert.pem";
- // 微信支付平台证书
- String wechatpayCertificateFilePath = "E:\\allrun2\\微信支付证书工具\\wechatpay_38023669B5DBFED58B2B16B3D38CA15DB983E002.pem";
- //下载成功后保存证书的路径
- String outputFilePath = "E:\\allrun2\\微信支付证书工具";
-
-
-
- //native统一下单
- String nativePay = "https://api.mch.weixin.qq.com/v3/pay/transactions/native";
-
- WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create()
- .withMerchant(mchId, mchSerialNo, PemUtil.loadPrivateKey(new FileInputStream(mchPrivateKeyFilePath)));
-
- if (wechatpayCertificateFilePath == null) {
- //不做验签
- builder.withValidator(response -> true);
- } else {
- List
certs = new ArrayList<>(); - certs.add(PemUtil.loadCertificate(new FileInputStream(wechatpayCertificateFilePath)));
- builder.withWechatpay(certs);
- }
-
- /*HttpGet httpGet = new HttpGet(CertDownloadPath);
- httpGet.addHeader("Accept", "application/json");
- try (CloseableHttpClient client = builder.build()) {
- CloseableHttpResponse response = client.execute(httpGet);
- int statusCode = response.getStatusLine().getStatusCode();
- String body = EntityUtils.toString(response.getEntity());
- if (statusCode == 200) {
- System.out.println("body:" + body);
- } else {
- System.out.println("download failed,resp code=" + statusCode + ",body=" + body);
- throw new IOException("request failed");
- }
- }*/
- HttpPost httpPost = new HttpPost(nativePay);
- httpPost.addHeader("Accept", "application/json");
- httpPost.addHeader("Content-type","application/json; charset=utf-8");
- ObjectMapper objectMapper = new ObjectMapper();
-
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- ObjectNode rootNode = objectMapper.createObjectNode();
- rootNode.put("mchid",mchId)
- .put("appid", "wxf3152dbae1f27a61")
- .put("description", "Ima5677公仔")
- .put("notify_url", "http://2j9c780335.zicp.vip/siyu-cloud-pay-biz/pms/wechatPay/callback")
- .put("out_trade_no", "515414244");
- rootNode.putObject("amount")
- .put("total", 1);
-
- objectMapper.writeValue(bos, rootNode);
- httpPost.setEntity(new StringEntity(bos.toString("UTF-8")));
- try (CloseableHttpClient httpClient = builder.build()) {
- CloseableHttpResponse response = httpClient.execute(httpPost);
- String bodyAsString = EntityUtils.toString(response.getEntity());
- System.out.println(bodyAsString);
- }
-
-
-
-
- }
- }