网站首页 > 技术文章 正文
微信的支付文档,看似很全,实际则特别分散。可能在公司里微信支付的工具类和相关参数已经有人告知或者写好了,大部分同学尽管调用就可以了,但是对于刚上手想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:管理证书,根据提示操作即可,具体参考:https://kf.qq.com/faq/161222NneAJf161222U7fARv.html
根据上述操作生成证书,下载到本地是一个证书压缩包,解压后,压缩包里面的内容是这样的:
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生成二维码展示到页面上,然后就可以扫码支付了
复制代码
作者:一杭
链接:https://juejin.cn/post/7209147630973435963
猜你喜欢
- 2024-12-31 基于react18+arco+zustand仿微信web版聊天React18Chat
- 2024-12-31 微信“拍一拍”,新鲜感带来的生命力
- 2024-12-31 误发群消息太“尴尬”微信“容错”机制或需更完善
- 2024-12-31 svelte.js+mescroll仿微信朋友圈
- 2024-12-31 做了这么久的微信用户运营,这15条经验总结送给你
- 2024-12-31 【完结】Flutter3+Getx仿微信桌面端exe聊天程序
- 2024-12-31 使用企业微信登录个人网站之:二、html前端二维码展示
- 2024-12-31 用nodejs调用微信支付接口实现前端页面在线收款
- 2024-12-31 用企业微信机器人做交互式前端-开发与复用
- 2024-12-31 程序员必备神器!这款Markdown编辑器,让你告别微信排版噩梦!
你 发表评论:
欢迎- 527℃Oracle分析函数之Lag和Lead()使用
- 525℃几个Oracle空值处理函数 oracle处理null值的函数
- 521℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 508℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 506℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 497℃【数据统计分析】详解Oracle分组函数之CUBE
- 475℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 474℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端排序 (47)
- 前端定时器 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)