zoukankan      html  css  js  c++  java
  • 微信支付入门

    微信支付和支付宝在线支付越来越重要,在各种产品中多多少少都会和支付打交道,此篇博客用采用第三方开源代码best-pay-sdk封装好的api作为入门代码。

    导入开源jar包到SrpingBoot中:

    	   <dependency>
                <groupId>cn.springboot</groupId>
                <artifactId>best-pay-sdk</artifactId>
                <version>1.3.0</version>
            </dependency>
    

    best-pay-sdk具体使用可参考文档:

    https://github.com/Pay-Group/best-pay-sdk/blob/develop/doc/use.md

    微信支付(native方式):

    新建支付service接口:

    package cn.blogsx.pay.service;
    
    import com.lly835.bestpay.model.PayResponse;
    
    import java.math.BigDecimal;
    
    public interface IPayService {
        /**
         * 创建/发起支付
         */
        PayResponse create(String orderId, BigDecimal amount);
    
    }
    
    

    实现类:

    以下公众账号appid、mchId、mchKey 均作演示,并非实际可用值

    package cn.blogsx.pay.service.impl;
    
    import cn.blogsx.pay.service.IPayService;
    import com.lly835.bestpay.config.WxPayConfig;
    import com.lly835.bestpay.enums.BestPayTypeEnum;
    import com.lly835.bestpay.model.PayRequest;
    import com.lly835.bestpay.model.PayResponse;
    import com.lly835.bestpay.service.impl.BestPayServiceImpl;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.stereotype.Service;
    
    import java.math.BigDecimal;
    
    /**
     * @author Alex
     * @create 2020-03-21 16:05
     **/
    @Slf4j
    @Service
    public class PayService implements IPayService {
        @Override
        public PayResponse create(String orderId, BigDecimal amount) {
            WxPayConfig wxPayConfig = new WxPayConfig();
            wxPayConfig.setAppId("wxd898fcb0fasfda658");
            wxPayConfig.setMchId("1483fsfdfsf2");
            wxPayConfig.setMchKey("0adf23rBfdsfasB4F6");
            wxPayConfig.setNotifyUrl("http://127.0.0.1");
    
            BestPayServiceImpl bestPayService = new BestPayServiceImpl();
            bestPayService.setWxPayConfig(wxPayConfig);
    
            PayRequest request = new PayRequest();
            request.setOrderName("45342434-测试支付sdk");
            request.setOrderId(orderId);
            request.setOrderAmount(amount.doubleValue());
            request.setPayTypeEnum(BestPayTypeEnum.WXPAY_NATIVE);
    
            PayResponse response = bestPayService.pay(request);
            log.info("response={}",response);
            return response;
        }
    }
    
    

    测试后可微信后台会以xml文档作为返回值,code_url值传递给前端可转为微信支付二维码。这里使用freemarker做测试使用。

     		<dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-freemarker</artifactId>
            </dependency>
    

    新建Controller:

    package cn.blogsx.pay.controller;
    
    import cn.blogsx.pay.service.impl.PayService;
    import com.lly835.bestpay.model.PayResponse;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    
    import java.math.BigDecimal;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @author Alex
     * @create 2020-03-21 16:51
     **/
    @Controller
    @RequestMapping("/pay")
    public class PayController {
    
        @Autowired
        private PayService payService;
        @GetMapping("/create")
        public ModelAndView create(@RequestParam("orderId") String orderId,
                                   @RequestParam("amount") BigDecimal amount) {
            PayResponse payResponse = payService.create(orderId, amount);
            Map map = new HashMap<>();
            map.put("codeUrl",payResponse.getCodeUrl());
            return new ModelAndView("create",map);
        }
    }
    
    

    新建名为create的freemarker文件,并采用jquery.qrcode作为前端生成二维码的插件:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>支付</title>
    
    </head>
    <body>
    <div id="myQrcode">
    
    </div>
    
    <script src="https://cdn.bootcss.com/jquery/1.5.1/jquery.min.js"></script>
    <script src="https://cdn.bootcss.com/jquery.qrcode/1.0/jquery.qrcode.min.js"></script>
    <script>
        jQuery('#myQrcode').qrcode({
            text	: "${codeUrl}"
        });
    </script>
    </body>
    </html>
    

    浏览器输入:http://localhost:8080/pay/create?orderId=132342145342141&amount=0.01 即可得到支付二维码

  • 相关阅读:
    影评
    札记
    竞赛203
    竞赛201
    StopWatch的使用
    mysql:GROUP_CONCAT
    DispatcherServlet核心方法doDispatch解析
    class对象与实例对象
    mybatis与传统ORM框架的区别
    servlet容器中listener、filter、interceptor的启动顺序
  • 原文地址:https://www.cnblogs.com/sxblog/p/12541897.html
Copyright © 2011-2022 走看看