- 流程:手机app端请求服务器,服务器返回一段字符串,app拿到字符串唤起支付宝进行支付
下面是服务端生成字符串内容代码,采用springmvc
@Controller
public class PayController {
private AlipayClient client;
public PayController() {
AlipayConfig alipayConfig = new AlipayConfig();
client = new DefaultAlipayClient(alipayConfig.getGateway_url(), alipayConfig.getAppid(),
alipayConfig.getRsa_private_key(), alipayConfig.getFormat(), alipayConfig.getCharset(),
alipayConfig.getAlipay_public_key(), alipayConfig.getSigntype());
}
@RequestMapping("appPayRequest")
@ResponseBody
public String appPayRequest(String orderNo) {
// 这里可以做一些库存校验操作
// this.check(orderNo);
try {
// SDK 公共请求类,包含公共请求参数,以及封装了签名与验签,开发者无需关注签名与验签
// 调用RSA签名方式
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
// 封装请求支付信息
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
// 用户自定义参数
model.setPassbackParams(orderNo);
Order order = getOrder(orderNo); // 查询订单
model.setOutTradeNo(order.getOutTradeNo()); // 商户网站唯一订单号,生成订单的时候就有
model.setSubject(order.getGoodsName()); // 商品的标题/交易标题/订单标题/订单关键字等。
model.setTotalAmount(MoneyUtils.formatMoney(order.getPayPrice())); // 设置金额
model.setBody(order.getGoodsName()); // 对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
request.setBizModel(model);
// 设置异步通知地址
request.setNotifyUrl("http://xxx.xxx/callback");
// 调用SDK生成表单
AlipayTradeAppPayResponse response = client.sdkExecute(request);
if (response.isSuccess()) {
// 获取到getBody直接给app,用这个东西去调起支付宝
return response.getBody();
} else {
logger.error("调用SDK生成表单失败,{}", JSON.toJSONString(response));
throw new Exception(response.getSubMsg());
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
throw new Exception("支付失败");
}
}
}
支付宝配置:
public class AlipayConfig {
// 商户ID
private String appid = "";
// 私钥
private String rsa_private_key = "";
// 异步回调地址
private String notify_url;
// 同步回调地址
private String return_url;
// 请求网关地址
private String gateway_url;
// 编码
private String charset = "UTF-8";
// 返回格式
private String format = "json";
// 支付宝公钥
private String alipay_public_key = "";
// RSA2
private String signtype = "RSA2";
//省略get set
}
当app支付成功后,支付宝会立即请求回调地址,回调处理可以查看这篇文章:支付宝支付后回调处理(Java版)