Skip to content

微信支付

zeemoo edited this page Jan 17, 2020 · 4 revisions

微信支付由于重构复杂度比较高,还有很多体力活,加上本人很懒,所以难产了。 现在完成了,用了接口类和抽象类以及泛型,去掉了很多冗余的代码,微信应用外 的H5支付大家可以自己去完成,可以参考抽象类进行扩展。还有就是,我所选取的 参数都是必填的参数,其他的参数大家可以自行扩展,记得req包下面的get方法, 如果遇到对象先手写成返回json字符串的,resp包下面的get方法,如果是对象要手 动实现get方法进行json反序列化。如果星星够多,我会考虑把这部分参数补上去😂 都是体力活

组件名:wechat-open-sdk-pay-spring-boot-starter

1.关键类

  • 注解:@EnableWechatMobileAppAndNativePay(移动应用和二维码扫码支付)、@EnableWechatJSAPIPay(JSAPI公众号)
  • 业务类:MobileAppBusinessServiceNativeBusinessServiceJsapiBusinessService
  • 父类:AbstractWechatBusinessService
  • 配置类:WebAppPropertiesMobileAppPropertiesMpProperties

2.类说明

大致和微信登录一样的结构,主要是抽象类AbstractWechatBusinessService,实现了大部分的代码,让业务类看起来更加简洁。

3.示例(以APP支付为例)

zeemoo:
  wechat:
    mobile:
      appid: wx88888888888888
      app-name: 移动应用
      app-secret: adhb53tvuzadqie328tgh3i9yq7d8gnbjksbcxcnjow
      mch-id: 1234566789
      certificate-path: c:\temp
      pay-callback-url: https://www.baidu.com
      pay-key: mqc6ad4fg8tar1ufnocs72fas3rwfh
      refund-notify-url: https://www.baidu.com

demo代码

  • 支付:创建request -> 补充参数 -> 下单返回参数给前端 -> 回调
  • 退款:创建request ->(补充参数)-> 申请退款 ->回调
@SpringBootApplication
@EnableWechatMobileAppAndNativePay
@Controller
public class DemoApplication {

    @Autowired
    private MobileAppBusinessService service;

    @ResponseBody
    @PostMapping("/prebill")
    public Map<String, Object> preBill(HttpServletRequest req) {
        String billSn = RandomStringUtils.randomAlphanumeric(32);
        String billDesc = "订单描述";
        BigDecimal totalAmount = BigDecimal.TEN;
        // 创建订单对象
        MobileAppPreBillRequest request = service.buildBillRequest(billSn, billDesc, totalAmount);
        // 不要忘记补充ip,不然我就给你报错
        request.setSpbillCreateIp(req.getRemoteAddr());
        // 创建第三方平台的订单
        MobileAppPreBillResponse response = service.genBill(request);
        // 转换成app所需要的参数
        Map<String, Object> map = service.transForView(response);
        return map;
    }

    @ResponseBody
    @RequestMapping("/payCallback")
    public String payCallback(HttpServletRequest request) {
        SettlementResponse settlementResponse = service.payCallback(request);
        /**
         * 处理业务
         */
        return "<xml>\n" +
                "  <return_code><![CDATA[SUCCESS]]></return_code>\n" +
                "  <return_msg><![CDATA[OK]]></return_msg>\n" +
                "</xml>";
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}