支付宝app支付流程(微信支付同理)

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

支付流程
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 = (i == values.length -1) ? valueStr + values[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字样的接口

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值