微信的付出文档,看似很全,实践则特别分散。可能在公司里微信付出的东西类和相关参数已经有人奉告或许写好了,大部分同学尽管调用就能够了,可是对于刚上手想0-1接通微信付出,还是有很多困难的。这篇文章一次性讲清v3版别的API付出

1.maven依靠

<dependency>
     <groupId>com.github.wechatpay-apiv3</groupId>
     <artifactId>wechatpay-java</artifactId>
     <version>0.2.6</version>
</dependency>  

2.微信付出根本参数解说

1.MACHID:微信付出商户号,参数经常也表明为merchantId

2.privateKeyPath:商户API证书的途径(文章下面会细讲API证书)

3.API_SERIAL_NO:也被称作merchantSerialNumber,是API证书的序列号(下面会细讲怎么获得)

4.certPath:wechatPayCertificatesFromPath()办法需要的参数,能够理解为微信付出渠道证书,这个和API证书是不一样的

5.callback_url:微信付出回调咱们系统的接口地址,回调接口会回来用户的付出成果,详细看微信的回调接口文档

6.APPID:这个指微信大众号或许小程序的appid,微信付出有必要要有大众号或许小程序(现在有必要是这样的)

简略介绍完这些参数后,开始详细解说这些参数是从哪里获取的

1.MACHID

一篇文章讲明白微信支付,适合第一次接通微信支付的同学



2.privateKeyPath:办理证书,依据提示操作即可,详细参阅:kf.qq.com/faq/161222N…

一篇文章讲明白微信支付,适合第一次接通微信支付的同学



依据上述操作生成证书,下载到本地是一个证书压缩包,解压后,压缩包里边的内容是这样的:



一篇文章讲明白微信支付,适合第一次接通微信支付的同学



public static final String privateKeyPath = "/Users/camel/cert/1610157505_20230310_cert/apiclient_key.pem";//API证书密钥途径,指的就是这个证书里的apiclient_key.pem途径

3.商户证书序列号的获取

public static final String API_SERIAL_NO = "xxxxxxxxxxC9203xxxxxx6C632";

账户中心—>API安全—>办理证册页,能够看到证书的序列号,或许访问证书解析网站:myssl.com/cert_decode…,上传文件选择图3中的apiclient_cert.pem证书



一篇文章讲明白微信支付,适合第一次接通微信支付的同学





一篇文章讲明白微信支付,适合第一次接通微信支付的同学



4.微信渠道证书生成

 public static final String certPath = "/Users/camel/cert/1xxx5xx5_20xxx_cert/file/wechatpay_5A4BE90F6551D7F8CD853CB65016E005237849E9.pem";

•下载微信付出渠道证书办法微信付出渠道证书下载东西微信付出渠道证书下载东西阐明:在这里下载CertificateDownloader.jar文件,按照里边的文档操作即可

•留意:我的操作阐明,我是把下载好的 CertificateDownloader.jar 文件,放在了解压证书的目录里(图3)。这样我取mchPrivateKeyFilePath这个值的时分就能够直接写证书文件名,不必写途径了。

官方完好指令如:

java -jar CertificateDownloader.jar -k ${apiV3key} -m ${mchId} -f ${mchPrivateKeyFilePath} -s ${mchSerialNo} -o ${outputFilePath} -c ${wechatpayCertificateFilePath}

我的实践操作指令如下:就会生成图3中多出来的file文件夹,/Users/camel/cert/xxxxxx_cert/file/wechatpay_5A4xxxxxxxxxx9.pem,wechatpay_xxxxx5A4849E9.pem就是微信付出渠道证书,也是程序真正需要的

java -jar CertificateDownloader.jar -k A9ABFECDDFCD09379A30C78E217FD52E -m 24242231 -f apiclient_key.pem -s CDDFCD0937282549D40C1CAA96B -o file

5.callback_url,微信付出成果的回调地址配置地方:



一篇文章讲明白微信支付,适合第一次接通微信支付的同学

至此,微信付出的相关底层参数介绍结束

6.以二维码付出为例,测验demo如下

  //下面的静态参数要细心看下面的解说,否则只会调用别人写好的办法,压根学不会0-1接入微信付出
    public static final String MACHID = "1610xxxx";
    public static final String APPID = "wx9aa9xxx7fxxxxxx";
    public static final String API_SERIAL_NO = "xxxxxxxxxxC9203xxxxxx6C632";
    public static final String privateKeyPath = "/Users/camel/cert/161xxxxx_202x0xxx_cert/apiclient_key.pem";
    public static final String certPath = "/Users/camel/cert/161xxxx_2023xxxcert/file/wechatpay_5A4BE90F6.pem";
    public static final String callback_url = "https://xxxxxx.com/wx/callback";
public static void main(String[] args) {
        try {
            // 初始化商户配置,在实践事务中,config最好全局变量创立一次就好,频繁创立config会报反常
            RSAConfig config = new RSAConfig.Builder()
                    .merchantId(MACHID)
                    // 运用 com.wechat.pay.java.core.util 中的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名
                    .privateKeyFromPath(privateKeyPath)
                    .merchantSerialNumber(API_SERIAL_NO)
                    .wechatPayCertificatesFromPath(certPath)
                    .build();
            // 初始化服务
            NativePayService service = new NativePayService.Builder().config(config).build();
            String orderNumber = IdGeneratorUtils.genDateUniqueId("MA", 16);
            log.info("orderNumber={}", orderNumber);
            PrepayRequest request = new PrepayRequest();
            Amount amount = new Amount();
            amount.setCurrency("CNY");
            amount.setTotal(1);
            request.setAmount(amount);
            request.setDescription("测验下单001");
            request.setOutTradeNo(orderNumber);
            request.setNotifyUrl(callback_url);
            request.setAppid(APPID);
            request.setMchid(MACHID);
            PrepayResponse response=service.prepay(request);
            log.info("result={}", JsonTools.object2Json(response));
        } catch (HttpException e) { // 发送HTTP请求失利
            log.error("1111111={}", e);
            // 调用e.getHttpRequest()获取请求打印日志或上报监控,更多办法见HttpException界说
        } catch (ServiceException e) { // 服务回来状态小于200或大于等于300,例如500
            log.error("222222222={}", e.getResponseBody());
            // 调用e.getResponseBody()获取回来体打印日志或上报监控,更多办法见ServiceException界说
        } catch (MalformedMessageException e) { // 服务回来成功,回来体类型不合法,或许解析回来体失利
            log.error("3333333333={}", e);
            // 调用e.getMessage()获取信息打印日志或上报监控,更多办法见MalformedMessageException界说
        } catch (Exception e) {
            log.error("未知反常:{}", e);
        }
    }

上述简略的代码,就能够完成微信的预下单,response会回来二维码的微信链接(咱们需要用第三方二维码东西,将微信链接转成二维码),response回来成果如下:

{
      "code_url": "weixin://wxpay/bizpayurl?pr=AasdeYzzzwqa"
}
//需要用第三方二维码生成东西weixin://wxpay/bizpayurl?pr=AasdeYzzzwqa生成二维码,在此不做赘述,生成的二维码文件回来给前端,或许前端依据code_url生成二维码展示到页面上,然后就能够扫码付出了

生成二维码的办法能够参阅我的另一篇文章:JAVA生成二维码

更多丰厚的付出逻辑根本都和这个差不多,能够参阅下边demo

微信付出DEMO

至此,微信付出的介绍结束,希望能帮到部分同学