aplipay支付-app支付之前后端實現


目錄

前言

  1. alipayApp支付產品介紹快速接入
  2. 調用接口圖解

一 前台aplipay實現

1.1 安裝0x5e/react-native-alipay

npm i @0x5e/react-native-alipay

1.2. 配置

ios 配置參考文檔
android 配置參考文檔

1.3. Alipay.pay(orderStr)

Returns object with following fields:

field type description
resultStatus String See Response code description
result String Result data in json string format
memo String Reserved field, nothing

The result data has following fields:

field type description
code String 結果碼,具體見公共錯誤碼
msg String 處理結果的描述,信息來自於code返回結果的描述
app_id String 支付寶分配給開發者的應用Id
out_trade_no String 商戶網站唯一訂單號
trade_no String 該交易在支付寶系統中的交易流水號
total_amount String 該筆訂單的資金總額,單位為RMB-Yuan
seller_id String 收款支付寶賬號對應的支付寶唯一用戶號
charset String 編碼格式
timestamp String 時間

Example code:

import Alipay from '@0x5e/react-native-alipay';

// APP支付
try {
  let orderStr = 'app_id=xxxx&method=alipay.trade.app.pay&charset=utf-8&timestamp=2014-07-24 03:07:50&version=1.0&notify_url=https%3A%2F%2Fapi.xxx.com%2Fnotify&biz_content=%7B%22subject%22%3A%22%E5%A4%A7%E4%B9%90%E9%80%8F%22%2C%22out_trade_no%22%3A%22xxxx%22%2C%22total_amount%22%3A%229.00%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%7D&sign_type=RSA2&sign=xxxx'; // get from server, signed
  let response = await Alipay.pay(orderStr);
  console.info(response);

  let { resultStatus, result, memo } = response;
  let { code, msg, app_id, out_trade_no, trade_no, total_amount, seller_id, charset, timestamp } = JSON.parse(result);

  // TODO: ...

} catch (error) {
  console.error(error);
}

1.3.1 orderStr是帶簽名的字符串

參考aplipay => App支付請求參數說明請求示例

1.3.2 同步通知+異步通知

服務器同步/異步通知參數說明

二 后端

2.1 服務端sdk下載

node版本

npm i alipay-sdk

2.2 實例化sdk

2.3 生成帶簽名的string

代碼參考

const fs = require('fs');
const AlipaySdk = require('alipay-sdk').default;
const util_1 = require('alipay-sdk/lib/util');

const APP_ID = '';//替換自己的APP_ID
const privateKey = fs.readFileSync('./private-key.pem', 'ascii');
const alipayPublicKey = fs.readFileSync('./public-key.pem', 'ascii');
const alipaySdk = new AlipaySdk({
  appId: APP_ID,
  privateKey,
  alipayPublicKey,
});

// 簽名並加密
exports.signOrder = (data) => {
  const params = {
    bizContent: {
      ...data,
      notifyUrl: '', //替換異步通知的url
    },
  };
  const config = alipaySdk.config;
  const signData = util_1.sign('alipay.trade.app.pay', params, config);
  const { url, execParams } = alipaySdk.formatUrl('', signData);
  const resultUrl = (url + '&biz_content=' + encodeURIComponent(execParams.biz_content)).substr(1);
  return Promise.resolve({ url: resultUrl });
};

//獲取App支付的同步通知, POST, https://docs.open.alipay.com/204/105301
exports.confirmOrder = (dataString) => {
  if (alipaySdk.checkResponseSign(dataString, 'alipay_trade_app_pay_response')) {
    // check 1/2/3/4 out_trade_no, total_amount, seller_id, app_id..
    return dataString;
  } else {
    return {
      error: true,
      message: 'Payment not verified.'
    };
  }
};


//獲取支付寶的異步通知, POST
exports.notifyOrder = (dataObject) => {
  if (alipaySdk.checkNotifySign(dataObject)) {
    return 'success';
  } else {
    return 'failure';
  }
};


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM