java对接微信支付:JSAPI支付(微信公众号支付)

港控/mmm° 2023-09-30 22:53 158阅读 0赞

本文是【微信JSAPI支付】文章,主要讲解商户对接微信支付,简洁版测试

文章目录

一、JSAPI支付接入前准备

二、代码片段

1.引入Maven依赖

2.后端业务请求接口

3.前端调起支付请求方法

总结


383ba011fbe042a28fccaaa88ba756ed.png


一、JSAPI支付接入前准备

1、JSAPI支付首先需要注册、认证一个公众号(大概300块一年)

微信公众号注册

2、申请成为商户,商户的类型有多种(普通商户,服务商,特约商户等),根据自己的需求申请

商户申请

3、微信公众号和商户关联

3.1、登录微信公众号关联申请号的商户号

76352e400fd24bcc99a27e8820d0f206.png

3.2、关联商户号

04dcd8d2c7e3422789e0bce8ee5fb2e2.png

点击添加,根据指引完成绑定…………..

4、获取appId、商户号

4.1、登录微信公众号,进入【基本配置】目录,取到公众号的appId ,如图

81dbdbc00f1343d88e7f35ae240f3abb.png

4.2、登录微信支付商户号,进入【账户中心->账户信息->微信支付商户号,取到微信支付商户号,如图 609a9fdf794e45dea506ce5e6d811b1c.png

5、登录微信商户平台,进入【账户中心 > API安全 】目录,设置APIV3密钥,有官方文档这里就不赘述了

1fbf4e7348474f2abc2789a7098372e1.png

二、代码片段

1.引入Maven依赖

  1. <dependency>
  2. <groupId>com.github.wechatpay-apiv3</groupId>
  3. <artifactId>wechatpay-java</artifactId>
  4. <version>0.2.7</version>
  5. </dependency>

2.后端业务请求接口

根据自己的业务需求进行修改使用,参数根据自己的需求来,代码如下(JSAPI示例):

  1. /** 商户号*/
  2. @Value("${wx.mchId}")
  3. private String mchId;
  4. /** 公众号appid*/
  5. @Value("${wx.appId}")
  6. private String appId;
  7. /** 商户APIV3密钥*/
  8. @Value("${wx.apiV3Key}")
  9. private String apiV3Key;
  10. /**微信回调地址*/
  11. @Value("${wx.v3PayNotifyUrl}")
  12. private String v3PayNotifyUrl;
  13. /** 商户证书序列号 */
  14. @Value("${wx.merchantSerialNumber}")
  15. private String merchantSerialNumber;
  16. public static RSAAutoCertificateConfig config = null ;
  17. public static JsapiServiceExtension service = null ;
  18. @GetMapping("/prepay")
  19. public PrepayWithRequestPaymentResponse WeChartPay(String amountString) {
  20. String openId = "oI*******************iGiA";
  21. // 订单号
  22. String orderUuid = IdUtils.getUUID();
  23. //元转换为分
  24. Integer amountInteger = Integer.valueOf(AmountUnitConversionUtil.changeYuanAndFen(amountString));
  25. //私钥文件路径(本地自己测试看自己的私钥文件存放路径)
  26. String filePath ="***/***/***/apiclient_key.pem";//测试环境可放到resource目录下
  27. // 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错
  28. if (config == null) {
  29. config =new RSAAutoCertificateConfig.Builder()
  30. .merchantId(mchId)
  31. .privateKeyFromPath(filePath)
  32. .merchantSerialNumber(merchantSerialNumber)
  33. .apiV3Key(apiV3Key)
  34. .build();
  35. }
  36. // 构建service
  37. if (service == null) {
  38. service = new JsapiServiceExtension.Builder().config(config).build();
  39. }
  40. //组装预约支付的实体
  41. // request.setXxx(val)设置所需参数,具体参数可见Request定义
  42. PrepayRequest request = new PrepayRequest();
  43. //计算金额
  44. Amount amount = new Amount();
  45. amount.setTotal(amountInteger);
  46. amount.setCurrency("CNY");
  47. request.setAmount(amount);
  48. //公众号appId
  49. request.setAppid(appId);
  50. //商户号
  51. request.setMchid(mchId);
  52. //支付者信息
  53. Payer payer = new Payer();
  54. payer.setOpenid(openId);
  55. request.setPayer(payer);
  56. //描述
  57. request.setDescription("支付测试");
  58. //微信回调地址,需要是https://开头的,必须外网可以正常访问
  59. //本地测试可以使用内网穿透工具,网上很多的
  60. request.setNotifyUrl(v3PayNotifyUrl);
  61. //订单号
  62. request.setOutTradeNo(orderUuid);
  63. // 加密
  64. PrepayWithRequestPaymentResponse payment = service.prepayWithRequestPayment(request);
  65. //默认加密类型为RSA
  66. payment.setSignType("MD5");
  67. //返回数据,前端调起支付
  68. return payment;

3.前端调起支付请求方法

  1. function onBridgeReady(){
  2. WeixinJSBridge.invoke(
  3. 'getBrandWCPayRequest', {
  4. "appId":"wx2421b1c4370ec43b", //公众号ID,由商户传入
  5. "timeStamp":"1395712654", //时间戳,自1970年以来的秒数
  6. "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串
  7. "package":"prepay_id=u802345jgfjsdfgsdg888",
  8. "signType":"MD5", //微信签名方式:
  9. "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名
  10. },
  11. function(res){
  12. if(res.err_msg == "get_brand_wcpay_request:ok" ){
  13. // 使用以上方式判断前端返回,微信团队郑重提示:
  14. //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
  15. }
  16. });
  17. }
  18. if (typeof WeixinJSBridge == "undefined"){
  19. if( document.addEventListener ){
  20. document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
  21. }else if (document.attachEvent){
  22. document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
  23. document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
  24. }
  25. }else{
  26. onBridgeReady();
  27. }

总结

以上就是根据官方文档进行实现的一个调起微信JSAPI支付测试,微信回调的接口就先不多说了,有需要的再留言,有问题可以留言一起讨论学习!

发表评论

表情:
评论列表 (有 0 条评论,158人围观)

还没有评论,来说两句吧...

相关阅读

    相关 公众支付

    最重要:公众号必须有支付权限 具体如何查看请百度 先配置一下 否则开发很蛋疼 楼主这几天都在蛋疼中 1.在公众号中获取 appid, mch

    相关 支付JSAPI支付

    1.介绍 JSAPI支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。 应用场景有:     ◆ 用户