1. 程式人生 > >app+服務端發起支付寶支付(Java版)

app+服務端發起支付寶支付(Java版)

  • 流程:手機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版)