乐优商城:笔记(十六):实现微信支付功能

1 介绍

微信支付官方文档:https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2F

我们选择的是扫码支付:
在这里插入图片描述
扫码支付有两种模式,我们选择流程二

2 开发流程

流程图:
在这里插入图片描述
这里我们把商户要做的事情总结一下:

  • 1、商户生成订单
  • 2、商户调用微信下单接口,获取预交易的链接
  • 3、商户将链接生成二维码图片,展示给用户;
  • 4、用户支付并确认
  • 5、支付结果通知:
    • 微信异步通知商户支付结果,商户告知微信支付接收情况
    • 商户如果没有收到通知,可以调用接口,查询支付状态
  • 6、如果支付成功,发货,修改订单状态

在前面的业务中,我们已经完成了:

  • 1、生成订单

接下来,我们需要做的是:

  • 2、调用微信接口,生成链接。
  • 3、并且根据链接生成二维码图片
  • 4、支付成功后修改订单状态

3 下单并生成支付链接

3.1 API说明

在微信支付文档中,可以查询得到以下信息:

支付路径

URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder

请求参数

在这里插入图片描述

  • 通知地址
    在这里插入图片描述
  • 在后面的代码中,我们将请求参数分成两部分填充:
    在这里插入图片描述

第一部分如上图所示,第二部分封装到config中,这个config是我们自己写的,实现了官方的接口WXPayConfig:
PayConfig:
在这里插入图片描述
官方的接口WXPayConfig:
在这里插入图片描述

然后在WXPay中的unifiedOrder方法中填充:
在这里插入图片描述
在这里插入图片描述

请求方式

post,源码如下:
在这里插入图片描述

返回结果

在这里插入图片描述
不一定执行了就一定成功,要做 通信和业务是否成功的校验 和 签名是否有效的校验,所以返回结果要做一个判断:
在这里插入图片描述
在这里插入图片描述

3.2 统一下单工具类

将属性定义到yml文件中
yml:
在这里插入图片描述

编写自定义配置,读取属性
payconfig:

@Data
public class PayConfig implements WXPayConfig {
   
    private String appID; // 公众账号ID

    private String mchID;// 商户号

    private String key;// 生成签名的密钥

    private int httpConnectTimeoutMs; // 连接超时时间

    private int httpReadTimeoutMs;// 读取超时时间

    private String notifyUrl;

    @Override
    public InputStream getCertStream() {
   
        return null;
    }
}

将PayConfig注册到Spring容器中
WXPayConfiguraturation:

@Configuration
public class WXPayConfiguration {
   

    @Bean
    @ConfigurationProperties(prefix = "ly.pay")
    public PayConfig payConfig(){
   
        return new PayConfig();
    }

    @Bean
    public WXPay wxPay(PayConfig payConfig){
   
        return new WXPay(payConfig, WXPayConstants.SignType.HMACSHA256);
    }

}

现在工具类都准备好了,接下来我们生成预交易链接:

public String createOrder(Long orderId, Long totalPay, String desc){
   
    try {
   
        Map<String, String> data = new HashMap<>();
        // 商品描述
        data.put("body", desc);
        // 订单号
        data.put("out_trade_no", orderId.toString());
        //金额,单位是分
        data.put("total_fee", totalPay.toString());
        //调用微信支付的终端IP
        data.put("spbill_create_ip", "127.0.0.1");
        //回调地址
        data.put("notify_url", payConfig.getNotifyUrl());
        // 交易类型为扫码支付
        data.put<
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值