微信native-v3版支付对接流程及demo

1.将p12证书转为pem证书,得到商户私钥

openssl pkcs12 -in apiclient_cert.p12 -out apiclient_cert.pem -nodes

密码是:商户id

2.将获取到的apiclient_cert.pem证书,复制出这一块内容,其他的不要

3.下载这个工具包

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

4.在test包中运行

生成证书

5.引入腾讯的sdk

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>

6.测试示例

java 复制代码
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<X509Certificate> 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);
        }




    }
}
相关推荐
风安•辛幸2 天前
mac上微信最新v4以上版客户端多开教程,亲测可用
macos·微信
智购科技无人售货机厂家3 天前
2026自动售货机出货口防夹手设计:从红外检测到电机反转的工程实践~YH
大数据·linux·单片机·嵌入式硬件·微信
QH139292318803 天前
R&S FSPN50 FSPN26 FSWP26 相位噪声分析仪典型应用案例
人工智能·百度·微信·集成测试·音视频·facebook·oneapi
UWA4 天前
GPM 2.0 WebGL 监测能力扩容|覆盖 Unity/Cocos/LayaAir 多引擎微信 & 抖音小游戏
unity·微信·性能优化·小游戏·webgl
运营秋秋5 天前
微信定时群发:设置一次自动触达
微信
极客互动API9 天前
企业微信 iPad 协议服务搭建与 AI 回调实战
网络·汇编·人工智能·微信·企业微信·ipad
极客互动API9 天前
企业微信 iPad 协议消息接口开发:文本 / 图片 / 群发消息的统一封装
人工智能·ios·微信·机器人·企业微信·ipad
Chengbei119 天前
DSH渗透测试插件dsh-pentest全新升级!适配DeepSeek Harness,可视化探索链路,一键搭建轻量化AI渗透测试环境。
人工智能·web安全·网络安全·微信·小程序·系统安全·安全架构
2501_9419820511 天前
个人微信API二次开发:多开回调串appId
微信
wechatbot88814 天前
极客互动企业微信 SCRM 私域运营实战效果全景
大数据·汇编·微信·自动化·企业微信·rpa