Vue+springboot 微信支付步骤(Native)

干的不能再干,分享给你们!!!!

微信支付步骤:

学习内容来自网络,学习地址推荐在最后
步骤比较多,需要花费点时间看完

一.注册成为微信支付的商户

如果你无法注册成商户
可以使用下面提供的千峰商户信息用于开发,我们使用的是Nateive支付
在这里插入图片描述开发文档:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1

二.下载SDK

选择好自己的语言来下载
在这里插入图片描述

三.在SDK中开发

1.解压SDK将pom.xml中的依赖复制到你项目中的pom.xml中,或者重新创建一个项目将pom.xml文件导入
在这里插入图片描述
利用maven加载依赖

2.将SDK文件下的所有文件复制到你的项目中
在这里插入图片描述

在这里插入图片描述

3.编写配置类MyWXPayDomain实现IWXPayDomain接口

public class MyWXPayDomain implements IWXPayDomain {
    @Override
    public void report(String domain, long elapsedTimeMillis, Exception ex) {

    }

    @Override
    public DomainInfo getDomain(WXPayConfig config) {
        DomainInfo domainInfo = new DomainInfo("api.mch.weixin.qq.com",true);
        return domainInfo;
    }
}

4.编写配置类MyWXPayConfig继承WXPayConfig

public class MyWXPayConfig extends WXPayConfig{
    /*商家注册微信支付之后会生成一个应用ID*/
    @Override
    String getAppID() {
        return "wx632c8f211f8122c6";
    }

    /*商户的ID*/
    @Override
    String getMchID() {
        return "1497984412";
    }

    @Override
    String getKey() {
        return "sbNCm1JnevqI36LrEaxFwcaT0hkGxFnC";
    }

    @Override
    InputStream getCertStream() {
        return null;
    }

    @Override
    IWXPayDomain getWXPayDomain() {
        MyWXPayDomain myWXPayDomain = new MyWXPayDomain();
        return myWXPayDomain;
    }
}

5.编写Controller实现支付效果
   5-1   通过图片的形式讲解用户下单-支付的整个流程

在这里插入图片描述

                                                            图片来自网络

   5-2   创建WXPayController

@RestController
@RequestMapping("/wxpay")
public class WXPayController {

    //编写下单接口
    @RequestMapping("/daPay/{enrollPay}")
    public void doPay(HttpServletResponse response,
                      @PathVariable("enrollPay") String enrollPay) throws Exception {
        //用于生成订单编号的随机数
        DateTimeUtil dateTimeUtil = new DateTimeUtil();
        String pid = "2020";//商品id
        String orderId = dateTimeUtil.getOrder()+pid;
        Double pay = Double.valueOf(enrollPay);

        System.out.println(pay+"-----------======");
        pay = pay*100;
        System.out.println(pay.intValue()+"-----------======2");//double转换为int
        String total_fee = String.valueOf(pay.intValue());

        //创建配置对象
        MyWXPayConfig config = new MyWXPayConfig();
        //创建支付对象
        WXPay wxpay = new WXPay(config);
        //将一些源数据存入到Map集合中
        Map<String, String> data = new HashMap<String, String>();
        data.put("body", "wz-社团报名费用");
        data.put("out_trade_no", orderId);//订单编号
        data.put("device_info", "");//设备信息
        data.put("fee_type", "CNY");//货币单位:分
        data.put("total_fee", total_fee);//1分
        data.put("spbill_create_ip", "123.12.12.123");//过滤的IP地址,为了让某些用户不可以扫我的码
        data.put("notify_url", "http://localhost/wxpay/notify_url");//回调接口,获取此次微信支付的信息
        data.put("trade_type", "NATIVE");  // 此处指定为扫码支付
        data.put("product_id", pid);//商品ID

        //向微信后台发起支付请求
        Map<String, String> resp = wxpay.unifiedOrder(data);

        System.out.print(resp);
        //得到一个二维码的链接  code_url
        String code_url = resp.get("code_url");
    }

    //用户扫码支付成功之后会调用这个接口
    @RequestMapping("/notify_url")
    public void getNotifyURL(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //在请求消息中获得数据
        ServletInputStream inputStream = request.getInputStream();
        byte[] b = new byte[1024];
        int len = 0;
        while((len = inputStream.read(b)) != -1) {
            String str = new String(b, 0, len);
            System.out.print(str);
        }
        //返回一个标准格式的回信,返回给前端,这个用户支付成功了,可以进行下一步操作了
        response.getWriter().write("<xml><return_code><![CDATA[SUCCESS]]></return_code>  <return_msg><![CDATA[OK]]></return_msg></xml> ");

      
}

本模块提供了一个回调接口http://localhost/wxpay/notify_url是微信后台所调用的,所以我们的localhost不能这样写,应该应用内网穿透工具将本地服务器暴露在公网上,以便微信后台可以直接访问。
下面介绍内网穿透

   5-3   内网穿透
内网穿透是将本地服务器暴露在公网上,供公网的用户访问

在这里插入图片描述
(1)推荐使用natapp.cn 浏览器地址栏输入即可
进去之后是这样的在这里插入图片描述
(2)注册自己的账号登录购买免费隧道

在这里插入图片描述
(3)查看已有隧道,里面有个我们要用到的authtoken值

在这里插入图片描述
(4)下载客户端

在这里插入图片描述
在这里插入图片描述
(5)打开token.txt文件
在这里插入图片描述
(6)在你刚刚解压的文件目录下点击上方文件目录框,输入cmd点击回车

在这里插入图片描述在这里插入图片描述
(7)将token.txt文件中的哪一行命令复制到这里,回车

在这里插入图片描述在这里插入图片描述
6.导入ZXing自动生成二维码
  6-1导包

<!--ZXing-->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.2.0</version>
        </dependency>

  6-2重新编写WXPayController


@RestController
@RequestMapping("/wxpay")
public class WXPayController {

    //编写下单接口--学生点击报名按钮时调用
    @RequestMapping("/daPay/{enrollPay}")
    public void doPay(HttpServletResponse response,
                      @PathVariable("enrollPay") String enrollPay) throws Exception {
        //用于生成订单编号的随机数
        DateTimeUtil dateTimeUtil = new DateTimeUtil();
        String pid = "2020";//商品id
        String orderId = dateTimeUtil.getOrder()+pid;
        Double pay = Double.valueOf(enrollPay);

        System.out.println(pay+"-----------======");
        pay = pay*100;
        System.out.println(pay.intValue()+"-----------======2");//double转换为int
        String total_fee = String.valueOf(pay.intValue());

        //创建配置对象
        MyWXPayConfig config = new MyWXPayConfig();
        //创建支付对象
        WXPay wxpay = new WXPay(config);
        //将一些源数据存入到Map集合中
        Map<String, String> data = new HashMap<String, String>();
        data.put("body", "wz-社团报名费用");
        data.put("out_trade_no", orderId);//订单编号
        data.put("device_info", "");//设备信息
        data.put("fee_type", "CNY");//货币单位:分
        data.put("total_fee", total_fee);//1分
        data.put("spbill_create_ip", "123.12.12.123");//过滤的IP地址,为了让某些用户不可以扫我的码
        data.put("notify_url", "http://jdxg6z.natappfree.cc/wxpay/notify_url");//回调接口,获取此次微信支付的信息
        data.put("trade_type", "NATIVE");  // 此处指定为扫码支付
        data.put("product_id", pid);//商品ID

        //向微信后台发起支付请求
        Map<String, String> resp = wxpay.unifiedOrder(data);

        System.out.print(resp);
        //得到一个二维码的链接  code_url
        String code_url = resp.get("code_url");

        //运用ZXing自动生成二维码
        HashMap<EncodeHintType, Object> hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
        hints.put(EncodeHintType.MARGIN, 2);
        try {
            BitMatrix bitMatrix = new MultiFormatWriter().encode(code_url, BarcodeFormat.QR_CODE, 200, 200, hints);
            MatrixToImageWriter.writeToStream(bitMatrix, "PNG", response.getOutputStream());
            System.out.print("二维码创建完成");
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    //用户扫码支付成功之后会调用这个接口
    @RequestMapping("/notify_url")
    public void getNotifyURL(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //在请求消息中获得数据
        ServletInputStream inputStream = request.getInputStream();
        byte[] b = new byte[1024];
        int len = 0;
        while((len = inputStream.read(b)) != -1) {
            String str = new String(b, 0, len);
            System.out.print(str);
        }
        //返回一个标准格式的回信,返回给前端,这个用户支付成功了,可以进行下一步操作了
        response.getWriter().write("<xml><return_code><![CDATA[SUCCESS]]></return_code>  <return_msg><![CDATA[OK]]></return_msg></xml> ");
    }
}

6.导入GoEasy

6-1后台是springboot中导入GoEasy依赖包

6-2编写WXPayController

6-3在vue中的mian.js文件中导入以下代码

6-4编写vue支付页面

6-5利用GoEasy完成服务端向客户端推送,即后台springboot数据变化时前端vue也发生改变

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Vue是一种用于构建用户界面的JavaScript框架,而Spring Boot是一个用于构建Java后端应用程序的框架。微信支付是一种移动支付方式,可以通过微信客户端完成支付。 在Vue和Spring Boot中集成微信支付的过程如下: 1. 在Vue中,使用微信支付的前提是用户在微信客户端中已经注册并绑定了银行卡。可以通过在Vue应用中引入微信支付的SDK来实现支付功能。 2. 在Vue中,用户选择需要支付的商品后,将商品信息发送给后端Spring Boot应用。 3. 在Spring Boot应用中,首先需要配置微信支付的相关参数,包括商户ID、支付密钥、回调URL等。 4. 当Spring Boot应用接收到支付请求后,首先需要生成一个唯一的订单号,并将订单号和商品信息保存到数据库中。 5. 接下来,Spring Boot应用将生成的订单号、商品信息,以及微信支付所需的其他参数(如总金额、商品描述等)返回给Vue应用。 6. 在Vue应用中,利用微信支付的SDK,使用返回的参数进行支付操作。 7. 用户确认支付后,在Vue应用中调用微信支付的接口,将支付请求发送给微信服务器。 8. 微信服务器接收到支付请求后,会根据支付参数进行支付验证和处理。如果用户的账户有足够的余额,并且支付验证通过,则支付成功。 9. 微信服务器将支付结果返回给Vue应用。同时,微信服务器还会通过配置的回调URL发送一个回调通知。 10. 后端的Spring Boot应用接收到支付回调通知后,可以根据回调通知中的支付结果更新订单状态。 通过以上步骤Vue和Spring Boot应用就完成了微信支付的集成。用户可以在Vue应用中选择商品进行支付,后端Spring Boot应用负责处理支付请求,并在支付成功后更新订单状态。微信支付一般都是在移动端进行,通过Vue和Spring Boot的集成,可以实现移动端的微信支付功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁同学与Android

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值