spring boot整合微信支付

一、官方概述

com.github.wxpay.sdk.WXPay类下提供了对应的方法:

方法名 说明 microPay 刷卡支付 unifiedOrder 统一下单 orderQuery 查询订单 reverse 撤销订单 closeOrder 关闭订单 refund 申请退款 refundQuery 查询退款 downloadBill 下载对账单 report 交易保障 shortUrl 转换短链接 authCodeToOpenid 授权码查询openid
    注意: 证书文件不能放在web服务器虚拟目录,应放在有访问权限控制的目录中,防止被他人下载 建议将证书文件名改为复杂且不容易猜测的文件名 商户服务器要做好病毒和木马防护工作,不被非法侵入者窃取证书文件 请妥善保管商户支付密钥、公众帐号SECRET,避免密钥泄露 参数为Map<String, String>对象,返回类型也是Map<String, String> 方法内部会将参数会转换成含有appid、mch_id、nonce_str、sign\_type和sign的XML 可选HMAC-SHA256算法和MD5算法签名 通过HTTPS请求得到返回数据后会对其做必要的处理(例如验证签名,签名错误则抛出异常) 对于downloadBill,无论是否成功都返回Map,且都含有return_code和return_msg,若成功,其中return_code为SUCCESS,另外data对应对账单数据

二、准备工作

2.获取appid

3.获取mchId

4.配置JSAPI域名

5.获取api密钥(遗忘需要重置)

7.获取apiclient_cert.p12文件


三、着手开发

引入依赖

GetMpController 文件(获取 MP_verify_cqlNsdZY4xZktC2l.txt 文件内容)
 ​

WXinConfig
 package com.zygh.webapi.config;
 ​
 import me.chanjar.weixin.mp.api.WxMpConfigStorage;
 import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
 import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
 import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Component;
 ​
 @Component
 public class WXinConfig {
 ​
     @Bean
     public WxMpService wxmpservice() {
 ​
         WxMpServiceImpl wxMpService = new WxMpServiceImpl();
 ​
         wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
         return wxMpService;
     }
 ​
     @Bean
     public WxMpConfigStorage wxMpConfigStorage() {
         MyConfig config = new MyConfig();
 ​
         WxMpInMemoryConfigStorage wxMpConfigStorage = new WxMpInMemoryConfigStorage();
         wxMpConfigStorage.setSecret(config.getAppSecret());
         wxMpConfigStorage.setAppId(config.getAppID());
         return wxMpConfigStorage;
     }
 }

MyConfig文件
 ​

WxPayEntity文件

WxPayController文件
 ​

前端
获取code

获取openId
  this.$axiox({
               method: GET,
               url: this.$AXIOSURL + "/WxPay/getCode",
               params: {
                     code: this.getQueryVariable("code")
                        }
               }).then((response) => {
                     // this.openId = response;
                     sessionStorage.setItem(openId, response);
                     this.$router.replace(/myCenter);
                     // console.log(response, 418);
               }).catch((response) => {
                    console.log(response)
                    Toast.fail(网络异常);
   })

*注:所有{}内的内容为需要替换的内容,所有前后端代码已脱敏处理,前端接口替换未使用{}进行标注,需自行查找并修改

经验分享 程序员 微信小程序 职场和发展