微信支付
zeemoo edited this page Jan 17, 2020
·
4 revisions
微信支付由于重构复杂度比较高,还有很多体力活,加上本人很懒,所以难产了。 现在完成了,用了接口类和抽象类以及泛型,去掉了很多冗余的代码,微信应用外 的H5支付大家可以自己去完成,可以参考抽象类进行扩展。还有就是,我所选取的 参数都是必填的参数,其他的参数大家可以自行扩展,记得req包下面的get方法, 如果遇到对象先手写成返回json字符串的,resp包下面的get方法,如果是对象要手 动实现get方法进行json反序列化。如果星星够多,我会考虑把这部分参数补上去😂 都是体力活
- 注解:
@EnableWechatMobileAppAndNativePay
(移动应用和二维码扫码支付)、@EnableWechatJSAPIPay
(JSAPI公众号) - 业务类:
MobileAppBusinessService
、NativeBusinessService
、JsapiBusinessService
- 父类:
AbstractWechatBusinessService
- 配置类:
WebAppProperties
、MobileAppProperties
、MpProperties
大致和微信登录一样的结构,主要是抽象类AbstractWechatBusinessService
,实现了大部分的代码,让业务类看起来更加简洁。
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);
}
}