aplipay支付-app支付之前后端实现
目录
前言
一 前台aplipay实现
1.1 安装0x5e/react-native-alipay
npm i @0x5e/react-native-alipay
1.2. 配置
1.3. Alipay.pay(orderStr)
- orderStr{String} Order info in query string format. Must be signed before use. See App payment request params description.
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×tamp=2014-07-24 03:07:50&version=1.0¬ify_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下载
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';
  }
};
    本博客所记录的文章,主要是从网络收集的,有一些因为经过多次转载,所以出处已经不知,若是侵权,请通知我,我及时修改。本博客主要是用来记录我对所写文章的理解,若有错误,请大家指点,相互学习!

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号