app+服務端發起支付寶支付(Java版)
阿新 • • 發佈:2019-02-02
- 流程:手機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版)