订单点击付款支付接口的实现
- 前言
- 一、DefaultAlipayClient是什么?
- 二、支付宝付款代码的实现
前言
该付款功能只支持支付宝付款:
工作过程中遇到了一个我的订单中展示出来详细的订单信息,然后在待付款的订单信息里面实现付款的接口的问题,可把我这个小菜鸡给难坏了,问了前辈大佬,一点点心得大家互相学习。
原型图类似这样的
首先,我们得明白支付宝的接口AlipayClient里面的DefaultAlipayClient
一、DefaultAlipayClient是什么?
AlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);
二、支付宝付款代码的实现
实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:
alipay.trade.app.pay
AlipayTradeAppPayRequest alirequest = new AlipayTradeAppPayRequest();
SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
一定要提前注入AlipayClient
代码如下():
logger.info("重新支付订单");AddressResponseDTO address = new AddressResponseDTO();//获取请求参数Object obj = parseJsonString(orderId, SubmitOrderRequestDTO.class);if (!obj.equals(DATAPARSINGMESSAGE)) {//转换类SubmitOrderRequestDTO order = (SubmitOrderRequestDTO) obj;//实例化客户端if(alipayClient==null)alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", "自己的appid","自己的私钥","json", "UTF-8", "公钥", "RSA2");//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.payAlipayTradeAppPayRequest alirequest = new AlipayTradeAppPayRequest();//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();model.setBody("商城订单");model.setSubject("商城订单");//订单idmodel.setOutTradeNo(sysOrder.getOrderId());model.setTimeoutExpress("20m");//订单金额model.setTotalAmount(sysOrder.getOriginalAmount().toString());model.setProductCode("QUICK_MSECURITY_PAY");alirequest.setBizModel(model);//这里输入你自己app商户的地址alirequest.setNotifyUrl("自己的请求接口");try {//这里和普通的接口调用不同,使用的是sdkExecuteAlipayTradeAppPayResponse response = alipayClient.sdkExecute(alirequest);if(response.isSuccess()) {address.setCodeUrl(response.getBody());address.setRetCode(0);address.setRetMessage("下单成功,等待支付");}else {address.setRetCode(500);address.setOrderNum(orderId);address.setRetMessage("支付宝下单失败");}} catch (Exception e) {e.printStackTrace();}}else {address.setRetCode(402);address.setRetMessage("参数错误");}String jsonString = createJsonString(address);logger.info("[app_rsp]" + createJson(address));return jsonString;}