zoukankan      html  css  js  c++  java
  • 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';
      }
    };
    
    
  • 相关阅读:
    cordova封装h5为app,cookie不可用解决方法
    Cordova环境搭建
    HelloWorld
    《机器学习实战》-朴素贝叶斯
    《机器学习实战》-决策树
    《机器学习实战》-k近邻算法
    《机器学习实战》-机器学习基础
    单输出感知机及其梯度
    损失函数及其梯度
    激活函数及其梯度
  • 原文地址:https://www.cnblogs.com/qiqi715/p/9624023.html
Copyright © 2011-2022 走看看