前言
前些日子写了一篇关于H5网页集成支付宝的文章:
Spring Boot集成支付宝(最新版SDK)—— H5/网页支付
当时写了好久,往那一坐就是俩小时,写完直接就发布了,发布之后才感觉少点啥——只写了网页支付,忘了写移动端APP支付!
APP集成支付宝,还是很简单的(当然建立在上一篇文章的基础上),本文应该写在上一篇文章的,但是上一篇文章的篇幅已经很长了,读起来会很累。
所以此文将作为上一篇文章的下集,请先看我的上一篇文章再回来读此文,再次贴出链接:
Spring Boot集成支付宝(最新版SDK)—— H5/网页支付
移动端APP集成支付宝
打开官方文档,还记得我们上一节说的API规范吗:
基于此,我们继续往下看:
看到了吧,简直不要太容易,换一下调用的方法即可,接下来修改代码:
package com.course.java.alipay.service;
import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.payment.app.models.AlipayTradeAppPayResponse;
import com.alipay.easysdk.payment.facetoface.models.AlipayTradePayResponse;
import com.alipay.easysdk.payment.page.models.AlipayTradePagePayResponse;
import com.course.java.alipay.bo.PaymentBO;
import com.course.java.alipay.util.OrderUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
/**
* 支付宝支付,业务实现
*
* @author wangziyang
* @date 2020-10-01
* */
@Service
public class PayService {
//支付成功后要跳转的页面
@Value("${alipay.returnUrl}")
private String returnUrl;
/**
* 下单支付
* */
public Object pay (PaymentBO bo) throws Exception {
//从存储介质(如MySQL、Redis)查询商品信息、总金额等敏感信息
//…………省略相关代码,这里直接赋值…………
bo.setSubject("测试商品");
bo.setTotal(new BigDecimal(10.00));
//调用sdk,发起支付
/*AlipayTradePagePayResponse response = Factory.Payment
//选择网页支付平台
.Page()
.asyncNotify("http://98d89k.natappfree.cc/pay/fallback")
//调用支付方法,设置订单名称、我们自己系统中的订单号、金额、回调页面
.pay(bo.getSubject() , OrderUtil.getOrderNo(), bo.getTotal().toString() , returnUrl);*/
//只需要换一个支付场景即可
AlipayTradeAppPayResponse response = Factory.Payment
//选择app支付平台
.App()
//可通过此方法单独设置异步回调,优先级大于配置文件
.asyncNotify(returnUrl)
.pay(bo.getSubject() , OrderUtil.getOrderNo() , bo.getTotal().toString());
//这里的response.body,就是一个订单串,直接返回给移动端。
// (实际场景要用统一的响应模板进行封装,code、msg、data,偷个懒)
return response.body;
}
}
这就好了,只需要把支付宝返回的订单串原封不动的返回给移动端,移动端就可以唤起支付宝支付。异步回调的API该咋写就咋写,和之前一样;至于支付完成之后的页面,由移动端控制。
手笨,不会安卓和IOS,就不演示效果了,反正后端是没问题,拜~~~