啰嗦几句:微信支付v3版接口麻烦吗?在对接微信支付v3接口时,本来是一件很简单的事情,其实微信支付v3接口并不是很复杂,但是微信团队的管理很混乱,给我们开发者带来了巨大的麻烦。

微信支付v3版接口对接麻烦-问题出在了哪?

  • 其一:微信支付的版本较多,没有形成一个统一管理说明;
  • 其二:微信v3支付,没有一个完整的说明文档,文档都很分散;
  • 其三:微信支付官方文档看似很详细,其实很多关键点都没说明白,新手看着就很头疼;

下面详细的说一下微信支付v3接口的开发

这个版本整合微信官方文档,以微信小程序开发为基础,大家按步骤点开链接查看操作。

对接微信支付API v3

前提:商户号已注册好,准备就绪。
  • 接入前准备

    注意:操作过程中产生的APIv3秘钥记录下来,有的后面会用到。 例如 API v3秘钥:B3AQsC17C6UFooIRCAaXRUvaq8PInN60

    微信商户平台接入说明文档

    [微信商户平台](https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_1.shtml)



    说明:这个是小程序版,如果是其他平台可以在左侧找对应目录

    注意:这个流程走下来你会拿到一个压缩文件类似下图



    图:这个压缩文件里有三个证书(解压后如下图),三个证书文件拷贝到你的开发平台里,使用方式继续往下看

  • 扫码进入商户平台的入口

    微信商户平台

    [微信商户平台](https://pay.weixin.qq.com)

    说明:使用管理者的微信扫码进入,进入后台根据上面的说明进行操作。如果没有注册可以直接走注册流程。注册流程这里不讲解。

  • 扫码小程序后台的入口

    微信小程序后台

    [微信小程序后台](https://mp.weixin.qq.com/)

    注意:如果没有申请小程序可以进入这里看怎么申请

    申请小程序说明

  • 小程序后台开通微信支付并绑定商户平台说明

    小程序后台开通微信支付并绑定商户平台说明

    [小程序后台开通微信支付并绑定商户平台说明](https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_1.shtml)

    注意:查看说明中最后的【5.配置应用】进行操作

  • 获取商户API证书序列号(merchantSerialNumber)

    进入证书查看网站

    [进入证书查看网站](https://myssl.com/cert_decode.html)



    说明:上传证书文件:apiclient_cert.pem,点击查看证书,里面会有个序列号,复制出来。下载微信支付平台证书会用到。

    例如:

    证书序列号:54776TTTF8F77EXXX3641FAB5F940FII11C65347

  • 下载微信支付平台证书方法

    微信支付平台证书下载工具

    [微信支付平台证书下载工具](https://github.com/wechatpay-apiv3/CertificateDownloader)

    说明:在这里下载 CertificateDownloader.jar 文件,按照里面的文档操作即可

    注意:我的操作说明,我是把下载好的 CertificateDownloader.jar 文件,放在了解压证书的目录里。这样我取mchPrivateKeyFilePath这个值的时候就可以直接写证书文件名,不用写路径了。

官方完整命令如:

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

我的操作例如:

  1. java -jar CertificateDownloader.jar -k B3AQsC17C6UFooIRCAaXRUvaq8PInN60 -m 1901174254 -f apiclient_key.pem -s 54776TTTF8F77EXXX3641FAB5F940FII11C65347 -o file

注意:1.操作前 CertificateDownloader.jar 和 apiclient_key.pem 文件在同一个目录 。并且在这个目录中进入cmd命令工具。cmd命令工具中显示的目录就是CertificateDownloader.jar所在目录。

例如:

  1. 文件-CertificateDownloader.jar 路径:D:\WXCertUtil\cert\CertificateDownloader.jar
  2. 文件-apiclient_key.pem 路径:D:\WXCertUtil\cert\apiclient_key.pem
  3. cmd中路径:D:\WXCertUtil\cert>

注意:2.命令中 -o file 只是个文件夹,命令执行后会在下面路径中生成一个微信支付平台证书文件。把这个证书也复制到你的平台中,和上面三个证书放在一个位置方便管理。

例如:

D:\WXCertUtil\cert\file\wechatpay_3A4AF69999DF01F39BB08C21C1C29B6AA17C074N.pem

至此,所有微信支付v3的准备工作已就绪,接下来,使用微信官方SDK开发接入微信支付v3。

Java平台接入微信支付v3接口

更多平台看官方文档

微信支付 APIv3 Java SDK

微信支付 APIv3 Java SDK,里面有详细说明

github 地址:https://github.com/wechatpay-apiv3/wechatpay-java

注意:开发可以根据这里的说明操作就好了,下面我写一下可能大家不理解的点。

com.github.wechatpay-apiv3:wechatpay-java

代码中的配置-例如:

  1. /** 商户号 */
  2. public static String merchantId = "1901174254";
  3. /** 商户API私钥路径 */
  4. public static String privateKeyPath = "apiclient_key.pem";
  5. /** 商户证书序列号 */
  6. public static String merchantSerialNumber = "54776TTTF8F77EXXX3641FAB5F940FII11C65347";
  7. /** 微信支付平台证书路径 */
  8. public static String wechatPayCertificatePath = "wechatpay_3A4AF69999DF01F39BB08C21C1C29B6AA17C074N.pem";
  9. /** 微信支付 APIv3 密钥 */
  10. /** 如果微信支付平台证书,已经下载好了,apiV3Key 就不需要了 */
  11. public static String apiV3Key = "B3AQsC17C6UFooIRCAaXRUvaq8PInN60";

如果微信支付平台证书,已经下载好了,github里这个代码就不用看了。

  1. package com.wechat.pay.java.service;
  2. import com.wechat.pay.java.core.Config;
  3. import com.wechat.pay.java.core.RSAConfig;
  4. import com.wechat.pay.java.service.certificate.CertificateService;
  5. import java.nio.charset.StandardCharsets;
  6. import java.security.cert.X509Certificate;
  7. import java.util.List;
  8. /** 下载微信支付平台证书为例 */
  9. public class QuickStart {
  10. /** 商户号 */
  11. public static String merchantId = "";
  12. /** 商户API私钥路径 */
  13. public static String privateKeyPath = "";
  14. /** 商户证书序列号 */
  15. public static String merchantSerialNumber = "";
  16. /** 微信支付平台证书路径 */
  17. public static String wechatPayCertificatePath = "";
  18. /** 微信支付 APIv3 密钥 */
  19. public static String apiV3Key = "";
  20. public static void main(String[] args) {
  21. Config config =
  22. new RSAConfig.Builder()
  23. .merchantId(merchantId)
  24. .privateKeyFromPath(privateKeyPath)
  25. .merchantSerialNumber(merchantSerialNumber)
  26. .wechatPayCertificatesFromPath(wechatPayCertificatePath)
  27. .build();
  28. CertificateService certificateService = new CertificateService.Builder().config(config).build();
  29. List<X509Certificate> certificates =
  30. certificateService.downloadCertificate(apiV3Key.getBytes(StandardCharsets.UTF_8));
  31. }
  32. }

支付的第一步:微信支付前需要拿到预支付id(prepayId),才能支付,所有支付的第一步是预支付

  1. import com.wechat.pay.java.core.Config;
  2. import com.wechat.pay.java.core.RSAConfig;
  3. import com.wechat.pay.java.service.payments.jsapi.JsapiService;
  4. import com.wechat.pay.java.service.payments.jsapi.model.Amount;
  5. import com.wechat.pay.java.service.payments.jsapi.model.Payer;
  6. import com.wechat.pay.java.service.payments.jsapi.model.PrepayRequest;
  7. import com.wechat.pay.java.service.payments.jsapi.model.PrepayResponse;
  8. public class JsapiExample {
  9. public static void main(String[] args) {
  10. Config config =
  11. new RSAConfig.Builder()
  12. .merchantId(merchantId)
  13. .privateKeyFromPath(privateKeyPath)
  14. .merchantSerialNumber(merchantSerialNumber)
  15. .wechatPayCertificatesFromPath(wechatPayCertificatePath)
  16. .build();
  17. JsapiService service = new JsapiService.Builder().config(config).build();
  18. PrepayRequest request = new PrepayRequest();
  19. Amount amount = new Amount();
  20. amount.setTotal(100);
  21. request.setAmount(amount);
  22. request.setAppid("wxa9d9651ae******");
  23. request.setMchid("190000****");
  24. request.setDescription("测试商品标题");
  25. request.setNotifyUrl("https://notify_url");
  26. request.setOutTradeNo("out_trade_no_001");
  27. Payer payer = new Payer();
  28. payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********");
  29. request.setPayer(payer);
  30. PrepayResponse response = service.prepay(request);
  31. System.out.println(response.getPrepayId());
  32. }
  33. }

还需要知道的:微信平台给的用户openid,并不是一个用户的唯一ID,不能多个小程序同时使用。也就是说,在小程序A中拿到的用户openid 和 在小程序B中拿到的用户openid 是不一样的。

微信支付v3接口的 官方 Java SDK的更多相关文章

  1. 微信支付 V3 的 Java 实现 Payment Spring Boot-1.0.7.RELEASE 发布

    Payment Spring Boot 是微信支付V3的Java实现,仅仅依赖Spring内置的一些类库.配置简单方便,可以让开发者快速为Spring Boot应用接入微信支付. 功能特性 实现微信支 ...

  2. 为了Java微信支付V3开发包,我找出了微信支付文档至少六个错误

    1. 前言 最近忙的一批,难得今天有喘气的机会就赶紧把最近在开发中的一些成果分享出来.前几日分享了自己写的一个微信支付V3的开发包payment-spring-boot-starter,就忙里偷闲完善 ...

  3. 微信支付V3 SDK Payment Spring Boot 1.0.6 发布,实现留守红包,助力抗疫

    春节将至,为防控疫情,多地政府提倡员工.外来务工者留守本地过年,并鼓励企业向员工发放"留守红包".为此,微信支付推出"春节留守红包"能力,希望可以协助有发放需求 ...

  4. 到处都是坑的微信支付V3

    业务需要一个在微信上能付款的功能,于是乎想到了最普遍的支付宝,坑爹的是T与A是水火不容啊,默默的还是接微信支付吧,没想到从此掉进了连环坑…… 网上写微信支付接口的还是很多,PHP官方有(鄙视源码作者, ...

  5. Payment Spring Boot 1.0.4.RELEASE 发布,最易用的微信支付 V3 实现

    Payment Spring Boot 是微信支付V3的Java实现,仅仅依赖Spring内置的一些类库.配置简单方便,可以让开发者快速为Spring Boot应用接入微信支付. 欢迎ISSUE,欢迎 ...

  6. 微信支付 V3 开发教程(一):初识 Senparc.Weixin.TenPayV3

    前言 我在 9 年前发布了 Senparc.Weixin SDK 第一个开源版本,一直维护至今,如今 Stras 已经破 7K,这一路上得到了 .NET 社区的积极响应和支持,也受到了非常多的宝贵建议 ...

  7. 坑爹的微信支付v3,其实没有那么坑

    http://www.cnblogs.com/zskbll/p/wxpay.html 研究微信开发一年多了,每个新接口,都会第一时间进行研究.微信支付开放很久,一直没机会接触到支付接口,等了好久终于从 ...

  8. 到处都是坑的微信支付V3之 微信支付回调页面

    据上次 到处都是坑的微信支付V3 后很多园友在被虐了千百遍后终于跳转到了亲切的微信支付界面,但输入密码支付后却不知道怎么处理了,接下来补上支付后的处理流程. 1. html中根据前台支付后反馈信息成功 ...

  9. php 微信开发之 微信支付 V3 开发 -CURLOP_TIMEOUT问题

    如果不懂怎么配置的话请看文章 php 微信开发之 微信支付配置 基本配置后在继续本文章的开发 . 本文章就先继续基本的实现!也并不困难.我大概的思路的返回购买者的唯一id 和 订单号的唯一 id 就2 ...

随机推荐

  1. 历时2月,动态线程池 DynamicTp 发布里程碑版本 V1.0.8

    关于 DynamicTp DynamicTp 是一个基于配置中心实现的轻量级动态线程池管理工具,主要功能可以总结为动态调参.通知报警.运行监控.三方包线程池管理等几大类. 经过多个版本迭代,目前最新版 ...

  2. 未完待续【java】JavaEE学习路线总览

    这个博客会详细介绍各种技术的知识点,从零基础到入门,充当引路的作用. 同时也会发布一些Swift语言.c#语言.Xcode开发的学习笔记.一些阅读的笔记(部分读书笔记无法发布). 目前1-43的Jav ...

  3. 第八十四篇:Vue购物车(五) 商品数量的增减

    好家伙, 1.商品数量的增减 我们把商品的数量增减独立出来,写成一个独立的组件Counter <template> <div class="number-container ...

  4. centos7部署k8s(1master1node)

    〇.前言 就想多学学罢了 准备环境: centos7 master 8GB 172.26.130.204 centos7 node 8GB 172.26.130.205 yum源就阿里源就好... 一 ...

  5. SpringBoot使用libreoffice转换PDF

    1.简介 有时候我们需要在程序中使用到office的转换和预览功能,本文就针对这个需求记录了较为简单的office转换和功能:jodconverter.当然也有aspose和其他开源第三方(kkfil ...

  6. Java开发学习(三十三)----Maven私服(一)私服简介安装与私服分类

    一.私服简介 团队开发现状分析 (1)张三负责ssm_crm的开发,自己写了一个ssm_pojo模块,要想使用直接将ssm_pojo安装到本地仓库即可 (2)李四负责ssm_order的开发,需要用到 ...

  7. Python数据科学手册-Pandas:向量化字符串操作、时间序列

    向量化字符串操作 Series 和 Index对象 的str属性. 可以正确的处理缺失值 方法列表 正则表达式. Method Description match() Call re.match() ...

  8. Dapr 集成 Open Policy Agent

    大型项目中基本都包含有复杂的访问控制策略,特别是在一些多租户场景中,例如Kubernetes中就支持RBAC,ABAC等多种授权类型.Dapr 的 中间件 Open Policy Agent 将Reg ...

  9. Django 之复制粘贴必备命令(补)

    一.Django 常用命令 pip install django==3.2 pip show django pip list django-admin startproject mysite pyth ...

  10. Stream流式计算

    Stream流式计算 集合/数据库用来进行数据的存储 而计算则交给流 /** * 现有5个用户,用一行代码 ,一分钟按以下条件筛选出指定用户 *1.ID必须是偶数 *2.年龄必须大于22 *3.用户名 ...