对接支付宝支付接口APP支付完整流程 java
maven依赖
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.13.58.ALL</version>
</dependency>
服务端代码
统一下单
先看代码:
String isopen = Global.getConfig("shop.pay.isopen");
if (!isopen.equals("1")){
throw new QyException("商户未开通支付宝支付");
}
String APP_ID = Global.getConfig("shop.pay.APP_ID");
String PRIVATE_KEY = Global.getConfig("shop.pay.PRIVATE_KEY");
String ALIPAY_PUBLIC_KEY = Global.getConfig("shop.pay.ALIPAY_PUBLIC_KEY");
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID,PRIVATE_KEY,"JSON","utf-8",ALIPAY_PUBLIC_KEY,"RSA2");
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
request.setBizContent("{" +
"\"timeout_express\":\"90m\"," +
"\"total_amount\":\""+shopOrder.getPayPrice()+"\"," +
"\"product_code\":\"QUICK_MSECURITY_PAY\"," +
"\"subject\":\""+"订单支付"+"\"," +
"\"out_trade_no\":\""+shopOrder.getId()+"\"," +
"\"goods_type\":\"0\"," +
"\"enable_pay_channels\":\"pcredit,moneyFund,debitCardExpress\"," +
" }");
String url="http://" + reques.getServerName() //商户外网可以访问的异步地址
+ ":"
+ reques.getServerPort() //端口号
+ reques.getRequestURI();
request.setNotifyUrl("http://"+reques.getServerName()+ ":"+ reques.getServerPort() +"/f/html/plug_shop/shopindex/requestAliPay");
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
return response.getBody();//就是orderString 可以直接给客户端请求,无需再做处理。
支付宝支付回调
/**
* 支付宝支付回调
*/
@RequestMapping(value = "/requestAliPay")
@ResponseBody
public String requestAliPay(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException, AlipayApiException, UnknownHostException {
// 获取支付宝GET过来反馈信息
System.out.println("支付宝回调");
Map<String, String> params = new HashMap<String, String>();
Map<String, String[]> requestParams = request.getParameterMap();
for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
}
// 乱码解决,这段代码在出现乱码时使用
valueStr = new String(valueStr.getBytes("utf-8"), "utf-8");
params.put(name, valueStr);
}
String ALIPAY_PUBLIC_KEY = Global.getConfig("shop.pay.ALIPAY_PUBLIC_KEY");
boolean signVerified = AlipaySignature.rsaCheckV1(params, ALIPAY_PUBLIC_KEY, "utf-8", "RSA2"); // 调用SDK验证签名
//验证签名通过
if(signVerified){
// 商户订单号
String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");
// 支付宝交易号
String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");
// 付款金额
String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"), "UTF-8");
System.out.println("商户订单号="+out_trade_no);
System.out.println("支付宝交易号="+trade_no);
System.out.println("付款金额="+total_amount);
//在这里处理自己的业务
return renderResult(Global.TRUE, "支付成功");
}else{
return renderResult(Global.FALSE, "支付失败");
}
}
客户端代码
前端用的uni_app 直接调用uni_app的方法
uni.requestPayment({
provider: 'alipay',
orderInfo: result.data, //微信、支付宝订单数据 【注意微信的订单信息,键值应该全部是小写,不能采用驼峰命名】
success: (res) => {
this.interval = setInterval(() => {
this.checkPayState();
}, 1000);
},
fail: function (err) {
console.log('fail:' + JSON.stringify(err));
}
});
可能对你有些帮助