springboot 微信Jsapi支付(V3版)

微信支付文档地址:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_1.shtml
微信支付SDK地址:https://github.com/wechatpay-apiv3/wechatpay-java

一、开通支付产品、获取相关配置参数
参数参数描述
appid公众账号ID(可以在开放平台查看,一般是wx开头)
mch_id商户号(可以在商户平台查看)
key商户APIV3密钥 (可以在商户平台查看设置)
merchant_serial_number商户证书序列号 (可以在商户平台查看设置)
二、后端生成订单,返回支付参数
1、加入依赖
<dependency>
  <groupId>com.github.wechatpay-apiv3</groupId>
  <artifactId>wechatpay-java</artifactId>
  <version>0.2.9</version>
</dependency>
2、微信支付配置参数
/**
 * @ClassName: WxPayConfig
 * @Description: 微信支付配置参数
 * @Version 1.0
 */
public final class WxPayConfig {
    // 应用ID
    public final static String appId = "wx*********";
    // 商户ID
    public final static String mchId = "1*********";
    // 回调地址
    public final static String notifyUrl = "http://***.com/pay/notify";
    /** 商户API私钥文件路径 */
    public final static String privateKeyPath = "apiclient_key.pem";
    /** 商户证书序列号 */
    public final static String merchantSerialNumber = "******";
    /** 商户APIV3密钥 */
    public final static String apiV3key = "******";

}
3、微信支付Controller类
@Controller
@RequestMapping("/pay")
public class PayController {
    @Autowired
    private WxPayService wxPayService;
    /**
     * 微信支付 Jsapi
     */
    @RequestMapping(value = "/createOrder", method = RequestMethod.GET)
    @ResponseBody
    public Map createOrder() {
        // 订单号
        String out_trade_no= "123456789";
        // 支付金额,单位分
        Integer money = 100;
        // 用户小程序openid
        String openid = "******";
        // 商品描述
        String description = "测试商品";
        Map result = wxPayService.jsapiPayV3(out_trade_no, money, openid, description);
        return result;
    }

}
4、微信支付服务类
public interface WxPayService {
    Map<String, String> jsapiPayV3(String out_trade_no, Integer money, String openid, String description);
}

@Service
public class WxPayServiceImpl implements WxPayService {

    @Override
    public Map<String, String> jsapiPayV3(String out_trade_no, Integer money, String openid, String description) {

        Config config = new RSAAutoCertificateConfig.Builder()
                .merchantId(WxPayConfig.mchId)
                .privateKeyFromPath(WxPayConfig.privateKeyPath)
                .merchantSerialNumber(WxPayConfig.merchantSerialNumber)
                .apiV3Key(WxPayConfig.apiV3key)
                .build();
                
        JsapiServiceExtension jsapiService = new JsapiServiceExtension.Builder().config(config).build();
       
        Amount amount = new Amount();
        amount.setTotal(money);
        Payer payer = new Payer();
        payer.setOpenid(openid);
        
        PrepayRequest preRequest = new PrepayRequest();
        preRequest.setAmount(amount);
        preRequest.setAppid(WxPayConfig.appId);
        preRequest.setMchid(WxPayConfig.mchId);
        preRequest.setDescription(description);
        preRequest.setNotifyUrl(WxPayConfig.notifyUrl);
        preRequest.setOutTradeNo(out_trade_no);
        preRequest.setPayer(payer);
        PrepayWithRequestPaymentResponse responses = jsapiService.prepayWithRequestPayment(preRequest);
        
        Map<String, String> payParameters = new HashMap<>();
        payParameters.put("timestamp", responses.getTimeStamp());
        payParameters.put("packageVal", responses.getPackageVal());
        payParameters.put("nonceStr", responses.getNonceStr());
        payParameters.put("signType", responses.getSignType());
        payParameters.put("paySign", responses.getPaySign());

        return payParameters;
    }

}

三、小程序中根据接口返回参数,发起支付
// 根据接口返回参数
wx.requestPayment({
  timeStamp: '',
  nonceStr: '',
  package: '',
  signType: 'RSA',
  paySign: '',
  success (res) { 
    console.log('pay success', res)
  },
  fail (err) { 
    console.error('pay fail', err)
  }
})
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要在微信公众平台申请开通JSAPI支付,并获取到商户号、密钥、证书等信息。 接着,在Spring Boot项目中添加微信支付SDK的依赖,比如: ```xml <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-pay</artifactId> <version>3.6.0</version> </dependency> ``` 然后,创建一个配置类来配置微信支付相关的参数,比如: ```java @Configuration public class WxPayConfig { @Value("${wxpay.appid}") private String appId; @Value("${wxpay.mchid}") private String mchId; @Value("${wxpay.key}") private String key; @Value("${wxpay.certPath}") private String certPath; @Bean public WxPayService wxPayService() throws Exception { WxPayConfig payConfig = new WxPayConfig(); payConfig.setAppId(appId); payConfig.setMchId(mchId); payConfig.setMchKey(key); payConfig.setKeyPath(certPath); return new WxPayServiceImpl(payConfig); } } ``` 其中,`appId`、`mchId`、`key`和`certPath`是申请支付时所获取到的信息。然后,通过`WxPayServiceImpl`创建一个`WxPayService`的实例,用于后续的支付操作。 接下来,编写控制器处理支付请求,比如: ```java @RestController @RequestMapping("/wxpay") public class WxPayController { @Autowired private WxPayService wxPayService; @PostMapping("/unifiedorder") public Map<String, String> unifiedOrder(@RequestBody WxPayUnifiedOrderRequest request) throws WxPayException { WxPayUnifiedOrderResult result = wxPayService.unifiedOrder(request); Map<String, String> resultMap = new HashMap<>(); resultMap.put("appId", result.getAppid()); resultMap.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000)); resultMap.put("nonceStr", result.getNonceStr()); resultMap.put("package", "prepay_id=" + result.getPrepayId()); resultMap.put("signType", "MD5"); resultMap.put("paySign", wxPayService.createSign(resultMap)); return resultMap; } } ``` 其中,`WxPayUnifiedOrderRequest`是支付请求参数,包括订单号、金额、回调地址等信息。`wxPayService.unifiedOrder(request)`方法返回的是支付下单结果,包括预支付ID等信息。最后,将这些信息组装成JSAPI支付所需的数据格式,返回给前端即可。 注意,在进行支付之前,需要先通过微信公众平台获取用户的openid,然后将其作为支付请求参数的一个字段传递给微信支付。另外,JSAPI支付还需要在页面上引入微信JSAPI的SDK,同时配置好微信公众平台的授权域名等信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值