官方SDK- Demo
官方文档链接:https://opendocs.alipay.com/open/54/106370#JAVA%20%E8%B0%83%E7%94%A8%E7%A4%BA%E4%BE%8B
1.接入逻辑
商家后台:指的是我们自己的项目后台
商家App:指的是我们自己的项目的app 端
2.如何进行SDK的调用
①先初始化 AlipayClient 对象:
AlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);
②参数说明:(具体的参数就参照文章顶部的链接,按照官方说明获取即可)
配置参数 | 示例值解释 | 获取方式/示例值 |
---|---|---|
URL | 支付宝网关(固定) | https://openapi.alipay.com/gateway.do |
APP_ID | 开发者应用私钥,由开发者自己生成 | 创建应用并获取 APPID |
APP_PRIVATE_KEY | APPID 即创建应用后生成 | |
FORMAT | 参数返回格式,只支持 json | json(固定) |
CHARSET | 请求和签名使用的字符编码格式,支持 GBK 和 UTF-8 | 据实际工程编码配置 |
ALIPAY_PUBLIC_KEY | 支付宝公钥,由支付宝生成 | |
SIGN_TYPE | 商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2 | RSA2 |
③注意:
接下来,就可以用 alipayClient 来调用具体的 API 了。alipayClient 只需要初始化一次,后续调用不同的API都可以使用同一个 alipayClient 对象
3.订单支付
项目中订单支付调用的支付接口(直接上代码):
// 订单支付接口:
public Result alipayAppPay(Order order) { // 这里的参数是对应的订单信息
//实例化客户端--参数要一一对应
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setSubject("App支付测试Java"); //付款后支付宝消息通知中的商品说明
model.setOutTradeNo("202012101123");//我们自己项目中的订单号-保证唯一 ,从订单参数中取
model.setTotalAmount("0.01"); //订单实际支付价格,从订单参数中取
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model);
request.setNotifyUrl("商户外网可以访问的异步地址");// 支付成功后回调地址, 下文有说明
AlipayTradeAppPayResponse response = null;
try {
response = alipayClient.sdkExecute(request);
} catch (AlipayApiException e) {
e.printStackTrace();
}
if (response.isSuccess()) {
Order order1 = new Order();
order1.setPayType(ConstantUtil.PAY_TYPE_2);
Example example = new Example(Order.class);
example.createCriteria().andEqualTo("orderSn", order.getOrderSn());
orderMapper.updateByExampleSelective(order1, example);
System.out.println(response.getBody());
result.setData(response.getBody());
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
}
return result; // 到这里支付就完成了,上述代码可结合自己实际进行修改使用
4.支付回调
上述 3 中还涉及到支付的一个回调通知可以理解为:支付完成后,支付宝通知我们,然后我们对自己系统中的对应订单数据做相应的处理:
下一篇接着淦支付回调
5.如果觉得对你有帮助就点个赞吧
这也算是我自己真正接触支付宝支付的一个心路历程,完整的记录下来,希望能帮助更多的人,一起进步……就是淦