支付宝app支付现在很方便,支付宝的参考文档也规范易懂,需要开发人员做的事很少,具体参考支付宝开发文档https://docs.open.alipay.com/204/105297/ ,后台服务端的话具体下载对应的sdk即可,我是做的java,具体流程如下:

Android 支付宝终端开发 支付宝支付开发流程_app

支付流程
app请求后台获取订单信息,后台只需封装参数,返回app包含签名的订单信息。代码如下:

// 主题
String subject =“测试商品”;
// 主题内容
String body =“testBody”;
// 订单号 随机(后面要改)
Date date =new Date();
StringBuilder dstr =new StringBuilder(DateFormatUtils.format(date, “yyyyMMddHHmmss”));
Stringout_trade_no=“zhs” + UUID.randomUUID().toString().substring(3, 7) + dstr;
System.err.println(“订单号—” + out_trade_no);
AlipayClient alipayClient =new DefaultAlipayClient(AliPayConfig.gateway, AliPayConfig.app_id,
AliPayConfig.app_private_key, "json", Charsets.UTF_8.toString(), AliPayConfig.alipay_public_key, AliPayConfig.sign_type);// 实例化具体API对应的request类,类名称和接口名称对应
AlipayTradeAppPayRequest aliRequest =new AlipayTradeAppPayRequest();
// sdk中的model入参
AlipayTradeAppPayModel model =new AlipayTradeAppPayModel();
// 描述信息,添加附加数据
model.setPassbackParams(body);
// 商品标题
model.setSubject(subject);
// 订单号
model.setOutTradeNo(out_trade_no);
// 超时关闭该订单时间
model.setTimeoutExpress(“30m”);
// 将double数值转换成String类
model.setTotalAmount(Double.toString(totalAmount));
model.setProductCode(AliPayConfig.product_code);
model.setSellerId(AliPayConfig.seller_id);
aliRequest.setBizModel(model);
// 回调地址
aliRequest.setNotifyUrl(AliPayConfig.notify_url);
String orderStr ="";
try {
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(aliRequest);
// 就是orderStr 可以直接给客户端请求,无需再做处理。

orderStr = response.getBody();}catch (AlipayApiException e) {
e.printStackTrace();
return orderStr;}
return orderStr;
只需将orderStr返回给app,app也调用支付宝sdk就可以解析吊起支付,测试可以使用沙箱,暂时只支持安卓。
服务器第二步就是回调方法:支付成功后支付宝会请求服务器后台的地址,这个地址不能携带参数。类似于这样
@ApiOperation(value =“支付宝回调”)
@PostMapping(value =“notify/aliPayNotify.do”)
public String aliPayNotify(HttpServletRequest request)
log.info(“支付宝回调开始-------------”);
// 获取支付宝POST过来反馈信息
Map params =new HashMap();
Map requestParams = request.getParameterMap();
for (Iterator 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 + values[i] +",";
}
// 乱码解决,这段代码在出现乱码时使用。
// valueStr = new String(valueStr.getBytes(“ISO-8859-1”), “utf-8”);
log.info(name +": " + valueStr);

params.put(name, valueStr);}

获取支付宝的回调信息,官方也有部分代码说明,支付宝回调里面的逻辑有,

第一,判断这个请求是不是支付宝的请求,

第二,判断接受的post通知中有无notify_id,如果有则是异步通知。

第三,验签,验证支付宝返回的签名是否正确

第四,根据trade_status,判断交易状态

if (“TRADE_SUCCESS”.equals(trade_status) ||“TRADE_FINISHED”.equals(trade_status)) {
log.info(“支付成功—”);
}else if (“WAIT_BUYER_PAY”.equals(trade_status)) {
log.info(“等待买家付款,不做处理…success…”);
}else if (“TRADE_CLOSED”.equals(trade_status)) {
log.info(“交易关闭,不做处理”);
}else {
log.info(“其他情况。。”);
}

第五,业务逻辑,校验金额,校验订单号,修改订单状态以及其他涉及到的业务逻辑。

也就是说app端只需要请求后端拿到订单信息,然后调用支付宝sdk完成支付,并不需要做回调,支付宝服务端会自动请求商家服务端notify字样的接口