Code Monkey home page Code Monkey logo

alipay-sdk-nodejs-all's People

Contributors

antopen avatar barretlee avatar fengmk2 avatar hubcarl avatar ottomao avatar powerdos avatar semantic-release-bot avatar troyeagle avatar tudou527 avatar zzh948498 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

alipay-sdk-nodejs-all's Issues

使用sdk创建订单的时候报错,验签失败,希望得到帮助

`my code

    const alipaySdk = new AlipaySdk({
        appId: appid,
        privateKey: fs.readFileSync(path.join(think.ROOT_PATH, 'key/rsa_private_key.pem'), 'ascii'),
        alipayPublicKey: fs.readFileSync(path.join(think.ROOT_PATH, 'key/rsa_public_key.pem'), 'ascii'),
    });
    const alipayMethod = 'alipay.trade.create';
    const alipayParams = {
        notifyUrl: notify_url,
        appAuthToken: '',
        bizContent: {
            outTradeNo: outTradeId,
            totalAmount: total_fee,
            subject: body,
        },
    };
    const alipayOptions = {
        // validateSign: true,
        log: think.logger,
    };
    try {
        const result = await alipaySdk.exec(alipayMethod, alipayParams, alipayOptions);
        console.log(' ----------------------------------------------------------- ');
        console.log(result);
        console.log(' ----------------------------------------------------------- ');
    } catch (err) {
        console.log(err);
    }

`

invalid-signature

    this.alipaySdk = new AlipaySdk({
      appId: alipayConfig.appId,
      gateway: alipayConfig.gateway,
      privateKey: fs
        .readFileSync(path.join(__dirname, './app-private-key.pem'), 'ascii')
        .trim(),
      alipayPublicKey: fs
        .readFileSync(path.join(__dirname, './alipay-public-key.pem'), 'ascii')
        .trim(),
      charset: 'utf-8',
      signType: 'RSA2',
    });
    const formData = new AlipayFormData();
    formData.setMethod('get');
    formData.addField(
      'notifyUrl',
      new URL(
        path.join(this.configService.apiPrefix, 'transactions/alipay/notify'),
        this.configService.website,
      ).toString(),
    );
    formData.addField(
      'returnUrl',
      new URL('/alipay/result', this.configService.website).toString(),
    );
    formData.addField('bizContent', {
      outTradeNo: tradeNo,
      productCode: 'FAST_INSTANT_TRADE_PAY',
      totalAmount: totalFee,
      subject: this.subject,
      body: this.description,
    });

    try {
      const result = await this.alipaySdk.exec(
        'alipay.trade.page.pay',
        {},
        {
          formData,
          validateSign: true,
          log: console,
        },
      );
      if (_.isString(result)) {
        return result;
      } else {
        throw new Error(
          `[main] [${result.code}] ${result.msg} - [sub] [${result.sub_code} ${
            result.sub_msg
          }]`,
        );
      }
    } catch (err) {
      this.logger.error('Fail to create direct payment url of alipay', err);
      throw new ApiException(ERRORS.PROXY_ERROR, '创建阿里云支付链接失败');
    }

沙箱环境下:

生成的付款地址调用一直返回:

错误代码 invalid-signature 错误原因: 验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配,网关生成的验签字符串为:alipay_sdk=alipay-sdk-nodejs-3.0.4&app_id=2016092500596274&biz_content={"out_trade_no":"201900123Test","product_code":"FAST_INSTANT_TRADE_PAY","total_amount":"0.01","subject":"心知天气服务费","body":"心知天气为你提供准确、稳定、全面的天气数据服务。"}&charset=utf-8&method=alipay.trade.page.pay&notify_url=http://hansel-dev.seniverse.com/api/v1/transactions/alipay/notify&return_url=http://hansel-dev.seniverse.com/alipay/result&sign_type=RSA2&timestamp=2019-03-11 13:12:03&version=1.0

生成的调用地址:

https://openapi.alipaydev.com/gateway.do?method=alipay.trade.page.pay&app_id=2016092500596274&charset=utf-8&version=1.0&sign_type=RSA2&timestamp=2019-03-11%2013:12:03&notify_url=http://hansel-dev.seniverse.com/api/v1/transactions/alipay/notify&return_url=http://hansel-dev.seniverse.com/alipay/result&sign=psu3WygBOcDgkt95tTXfV7yo1oIOB6c9mgnXKqKioTbh77wkaZhSBRTeZBLCJU6V6bwyP8Hxh7V0Jblx8Wg8FYNlb29FIFVQ30edccHbrblBN0kVFa4QBDdhwKFLOoYxmKSVYK5J/hz5CfiMrkxD1T5uM1NFit0eX/5ZelX8hjr3xDmjy3JsyZvrn+TTLHIp3khI5ZMKSAmcWEclx81MJGGQajsE+zV8b1FZHDvWtKVOmCnBNUJE7QMLJUoGLqIWqasFsyLY02/URsQUV5pAH+Sx1oNNMdpPp7gfSpCQANBcKqNSJ/HX3+LlRXtovOp8w8DOeD2nETtPUpKdn5o0YQ==&alipay_sdk=alipay-sdk-nodejs-3.0.4&biz_content=%7B%22out_trade_no%22:%22201900123Test%22,%22product_code%22:%22FAST_INSTANT_TRADE_PAY%22,%22total_amount%22:%220.01%22,%22subject%22:%22%E5%BF%83%E7%9F%A5%E5%A4%A9%E6%B0%94%E6%9C%8D%E5%8A%A1%E8%B4%B9%22,%22body%22:%22%E5%BF%83%E7%9F%A5%E5%A4%A9%E6%B0%94%E4%B8%BA%E4%BD%A0%E6%8F%90%E4%BE%9B%E5%87%86%E7%A1%AE%E3%80%81%E7%A8%B3%E5%AE%9A%E3%80%81%E5%85%A8%E9%9D%A2%E7%9A%84%E5%A4%A9%E6%B0%94%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1%E3%80%82%22%7D

但是用验签工具确定公钥私钥是匹配的,Help! 🤕

联调沙盒当面付接口失败

按照示例联调沙盒的当面付接口

const alipaySdk = new AlipaySdk({
    appId: '2016080600183929', //appId请在alipay后台获取
    gateway: 'https://openapi.alipaydev.com/gateway.do',
    privateKey: fs.readFileSync(appRoot + '/config/private-key.pem', 'ascii'),
    alipayPublicKey: fs.readFileSync(appRoot + '/config/alipay-public-key.pem', 'ascii'),
    camelcase: true,
});

let res = await alipaySdk.exec("alipay.trade.pay", {
    outTradeNo: chance.guid(),
    scene: "bar_code",
    authCode: query.auth_code,
    subject: "沙盒测试购买",
    totalAmount: "9.99"
  })

repsonse 参数错误,想问问有什么方法能够快速定位我是哪个参数出错了么

有没有node解密支付宝小程序用户手机号的代码案例呢?

`
var CryptoJS = require("crypto-js");
// 用户在支付宝小程序授权手机号后的 response
var data = ""
// 支付宝小程序设置的 AES
var aes = 'Lj59Ubk1ZyzlUZGTKgTl6A==';
// Base64 Utf8
var res = Buffer.from(data,'base64').toString();
console.log(res,'res')
var aes1 = Buffer.from(aes,'base64').toString();
console.log(aes1,'aes1')

var bytes = CryptoJS.AES.decrypt(res, aes1);

var plaintext = bytes.toString(CryptoJS.enc.Utf8);
console.log(plaintext,'plaintext');
`

这是我写的,但是不对。请问怎么改呢?

Typos / mismatch in README about AlipayFormData

  • Since the actual source uses a naming convention as AliPayForm, so I think it might make more sense to update the README to the same name as well? (see form.js and form.ts for reference)

使用alipay-sdk-nodejs包遇到的问题,希望得到帮助谢谢

使用alipay-sdk-nodejs包遇到的问题,希望得到帮助谢谢

私钥问题.

例子中使用的app 私钥为 -----BEGIN RSA PRIVATE KEY----- 开头,

而我用官方提供的RES签名验证工具win版生成的PKCS1格式的2048应用私钥为**-----BEGIN PRIVATE KEY-----**开头

生成sign成功之后,再调用alipaySdk.exec传入sign会报错

经检查发现是lib/alipay.ts第95行formatKey方法,对key值的处理有问题, 经测试不处理就行...
不处理可能仅仅不够全面, 您们

// 格式化 key
formatKey(key, type) {
	return key;
}

错误重现见项目

isv.invalid-signature

你好,我在对接支付宝代缴费业务时一直无法请求成功,能帮忙看下什么原因吗?

const Alipay = require('alipay-sdk').default;
const fs = require('fs');

const alipay = new Alipay({
  appId: '2016042200098826',
  privateKey: fs.readFileSync('./private-key.pem', 'ascii'),
  gateway: 'https://openapi.alipaydev.com/gateway.do',
});

alipay.exec('alipay.ebpp.jfexport.chargeinst.query', {
  biz_content: {
    biz_type: "JF",
    sub_biz_type: "GAS",
    page_query: true,
    page: 1,
    page_size: 10,
  },
}).then(result => {
  console.log('result: ', result);
}).catch(error => {
  console.log('error: ', error);
});

use PKCS#8 format private key error:
image

use PKCS#1 format private key error:
image

下列私钥都是测试账号的
private-key.pem

应用秘钥RSA2:
PKCS#8:
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDOB+7d4u08Hvfv
zynZGZ1FMfKi/4kravQbBd+6O38Yn/b8AfOy+vHHm6CRFOwpAGT503SliRJgSBs6
vCwrdAXZctYRzKkU7l4gCFMG8rL0kX1KWzYi3sQlsBylPay7cXVcjZiBNrxI7527
53L1C+JFP6yfbOSV2xn3xB4KlMRtLDcDYWHa2ffpS9nuFzY9YF5zt+63yxUhhQxe
9ISeS1K+1YGrQCemjZG8908e5kuq/ywcL/lhHB4BJ8xEp0u9OuyUTCnJy84Y/ifT
sxog8BXuDRPyzEChplssNUjH1RgHjpeCOPImypGuvbXq47KhEEPUW2qho5zIX0+U
cdsZJ0XRAgMBAAECggEAXZLCzSnUf1q9VsArDHwSrquZvKf8X6jKxz8qtoVxGvkE
Dr7ANQi+KN8o1NvAynpwYfrE3q3bl7kIDOwLz4x5X6JFUX43SNdeDoRZWS1/U46E
bfHxK3MreMZ8rBvPyK4mFGwG2KDIcQPLCt16m4rTMIpT13B4fQsuxxXeYwXgFIiQ
pSbVdWadnoZvZRwDeJF3p2kMOx9THnaMNnVakBuSKgpRd18tq4MnVRLreNk5rdtE
vUtRtdINUgIAjCkFISw3XgeodRYCYG04EJtO7CEQNAzirZTUXaRjfFa1WXu33xrY
yYAJdtYP/Q0fxY60xL8hcAAc2Zhaee6IsJPnuYPcBQKBgQDq549qQ/DzZV7FoIv5
1VIhGoJOwAI1XJtTvKBtzfjX4oKDmmjOzU4tVgCryxxU53IPwd8oXmvNKJkXVH4q
8h4ILwBLBiaSEPtuIjcVSbo7Z99xY2Vt2z/17h1pFLYdJSdP+yDs7iDQKZe7Bmdd
uOys9bRr+OCrVwDerEP/oEziewKBgQDgiJJtsT60z7cM5Jyc7VvF6VnsRZuQQesi
cJ7AbJ8k7zCjCeCv4/LLr6VUsWs2yW0KzXG5A2nJ70uBNBe+W08vOD7jNFPvyEQE
h4+39IfBWVDzq13lcW1X//OU3zUoftXiqgxxtABVB6Mly6skex4KUN1uDt4I5P8o
NnvCiPc9IwKBgQDQAgaz8b++uAgI9lac/3H/kErNUydhe0SsDL7/HMH64T/zK1sd
rR1J9fsYJP5MjLorC+EBDUNmY0nVJ+OlQcqoMn6O8L5c357VcoTWW/gGPL/W105s
zhZAPv9aGpX9DvZV06nfRCpYSkxqt4v2qRcjPVvrtHG2J4/EnkSEar1KWwKBgQCx
euKbuD3DuGiN1WsCFBC1uMUuoLrdZW2SVIj3uyR0kmjUhutGvRze6iD6eB8yODds
EYax4sPNLcx1/ZJDEnPd9EypVWR/pcI1/l2Y374rFAmMAkn/IhB3PcbxRxoCv3cb
aqTZf5m/nIDWUE4gUP0m1FKjOzdAupoB1EcxNwiPFwKBgQCBYKck0H/Yl3Z7RHAj
pxsoV5gZnljxU0WDa7/QW0xr/c2SBcFY1tr7sV3wiz3bEo35Zou7xd++PCetCmd+
5TaQ0nNwye1L75q6x9spzb64WHMtuXfZdCB9nWcKtVx1iFNpaqY6EM8poJ2/5kPT
yu+qGm7XTEJNg4gpXEtGjhLWOw==
-----END PRIVATE KEY-----

PKCS#1:
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAzgfu3eLtPB73788p2RmdRTHyov+JK2r0GwXfujt/GJ/2/AHz
svrxx5ugkRTsKQBk+dN0pYkSYEgbOrwsK3QF2XLWEcypFO5eIAhTBvKy9JF9Sls2
It7EJbAcpT2su3F1XI2YgTa8SO+du+dy9QviRT+sn2zkldsZ98QeCpTEbSw3A2Fh
2tn36UvZ7hc2PWBec7fut8sVIYUMXvSEnktSvtWBq0Anpo2RvPdPHuZLqv8sHC/5
YRweASfMRKdLvTrslEwpycvOGP4n07MaIPAV7g0T8sxAoaZbLDVIx9UYB46Xgjjy
JsqRrr216uOyoRBD1FtqoaOcyF9PlHHbGSdF0QIDAQABAoIBAF2Sws0p1H9avVbA
Kwx8Eq6rmbyn/F+oysc/KraFcRr5BA6+wDUIvijfKNTbwMp6cGH6xN6t25e5CAzs
C8+MeV+iRVF+N0jXXg6EWVktf1OOhG3x8StzK3jGfKwbz8iuJhRsBtigyHEDywrd
epuK0zCKU9dweH0LLscV3mMF4BSIkKUm1XVmnZ6Gb2UcA3iRd6dpDDsfUx52jDZ1
WpAbkioKUXdfLauDJ1US63jZOa3bRL1LUbXSDVICAIwpBSEsN14HqHUWAmBtOBCb
TuwhEDQM4q2U1F2kY3xWtVl7t98a2MmACXbWD/0NH8WOtMS/IXAAHNmYWnnuiLCT
57mD3AUCgYEA6uePakPw82VexaCL+dVSIRqCTsACNVybU7ygbc341+KCg5pozs1O
LVYAq8scVOdyD8HfKF5rzSiZF1R+KvIeCC8ASwYmkhD7biI3FUm6O2ffcWNlbds/
9e4daRS2HSUnT/sg7O4g0CmXuwZnXbjsrPW0a/jgq1cA3qxD/6BM4nsCgYEA4IiS
bbE+tM+3DOScnO1bxelZ7EWbkEHrInCewGyfJO8wowngr+Pyy6+lVLFrNsltCs1x
uQNpye9LgTQXvltPLzg+4zRT78hEBIePt/SHwVlQ86td5XFtV//zlN81KH7V4qoM
cbQAVQejJcurJHseClDdbg7eCOT/KDZ7woj3PSMCgYEA0AIGs/G/vrgICPZWnP9x
/5BKzVMnYXtErAy+/xzB+uE/8ytbHa0dSfX7GCT+TIy6KwvhAQ1DZmNJ1SfjpUHK
qDJ+jvC+XN+e1XKE1lv4Bjy/1tdObM4WQD7/WhqV/Q72VdOp30QqWEpMareL9qkX
Iz1b67RxtiePxJ5EhGq9SlsCgYEAsXrim7g9w7hojdVrAhQQtbjFLqC63WVtklSI
97skdJJo1IbrRr0c3uog+ngfMjg3bBGGseLDzS3Mdf2SQxJz3fRMqVVkf6XCNf5d
mN++KxQJjAJJ/yIQdz3G8UcaAr93G2qk2X+Zv5yA1lBOIFD9JtRSozs3QLqaAdRH
MTcIjxcCgYEAgWCnJNB/2Jd2e0RwI6cbKFeYGZ5Y8VNFg2u/0FtMa/3NkgXBWNba
+7Fd8Is92xKN+WaLu8XfvjwnrQpnfuU2kNJzcMntS++ausfbKc2+uFhzLbl32XQg
fZ1nCrVcdYhTaWqmOhDPKaCdv+ZD08rvqhpu10xCTYOIKVxLRo4S1js=
-----END RSA PRIVATE KEY-----

引入报错

/Users/zhuangzihao/i-counting/customer_api/controllers/AliyunService.js:4
import AlipaySdk from 'alipay-sdk';
^^^^^^

SyntaxError: Unexpected token import
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:599:28)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at Module.require (module.js:579:17)
at require (internal/module.js:11:18)
at Object. (/Users/zhuangzihao/i-counting/customer_api/rest/aliyun.js:6:23)
at Module._compile (module.js:635:30)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at Module.require (module.js:579:17)
at require (internal/module.js:11:18)
at Object. (/Users/zhuangzihao/i-counting/customer_api/route.js:45:16)
at Module._compile (module.js:635:30)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)

无法调用alipay.user.certify.open.certify

无法调用alipay.user.certify.open.certify接口

nodejs版本:v12.2.0
sdk版本:3.0.7
egg版本:2.15.1

其它接口调用都正常,如:alipay.user.certify.open.initialize

调用alipay.user.certify.open.certify的代码如下

try {
  const res = await this.alipaySdk.exec('alipay.user.certify.open.certify', {
    bizContent: {
      certifyId: '559fdxxxxxx' // initialize接口正常返回生成的
    }
  });
  return res;
} catch (e) {
  console.log(e);
  return false;
}

生成this.alipaySdk关键代码

// 可以确保alipaySdk没有问题,因为调用其它接口都没有问题
this.alipaySdk = new AlipaySdk({
  signType: 'RSA2',
  appId: constants.alipayAppId,
  charset: 'utf-8',
  privateKey: fs.readFileSync(path.resolve(__dirname, '../rsa/rsa_private_key.pem'), 'ascii'),
  alipayPublicKey: `MIIBIjAxxxxxxxxxx`,
});

console.log(e)的打印错误信息如下:

{
  serverResult: {
    data: '',
    status: 302,
    headers: {
      server: 'Tengine/2.1.0',
      date: 'Thu, 04 Jul 2019 13:01:45 GMT',
      'content-length': '0',
      connection: 'keep-alive',
      'set-cookie': [Array],
      location: 'https://custweb.alipay.com/certify/open/personal/dispatch/?alipay_exterface_invoke_assign_target=invoke_efffxxxxxxxxxxxxx&alipay_exterface_invoke_assign_sign=_d_m6xxxxxx_y_cc_t_f_na%2Bdat_p84_ids_txxxxxxxx0ln_a9_ja3pbv3_qn%2Bbhpxxxxxy_x%2B_s_a%3D%3D',
      via: 'spanner-app-ldc-g1-16.gtj[302]'
    },
    res: {
      status: 302,
      statusCode: 302,
      statusMessage: 'Found',
      headers: [Object],
      size: 0,
      aborted: false,
      rt: 769,
      keepAliveSocket: false,
      data: '',
      requestUrls: [Array],
      timing: null,
      remoteAddress: '110.75.244.202',
      remotePort: 443,
      socketHandledRequests: 1,
      socketHandledResponses: 1
    }
  },
  errorMessage: '[AlipaySdk]HTTP 请求错误'
}

已查看文档及与客服沟通,正常应该返回一个跳转链接,不应该错误的302响应。

谢谢!

设置了 passbackParams 会导致 alipaySdk.checkNotifySign 失败

如下,去除 passbackParams 后 alipaySdk.checkNotifySign 才会成功:

    formData.addField('bizContent', {
      // 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复
      outTradeNo: 'out_trade_no222333324',
      // 销售产品码,与支付宝签约的产品码名称。注:目前仅支持FAST_INSTANT_TRADE_PAY
      productCode: 'FAST_INSTANT_TRADE_PAY',
      // 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]。
      totalAmount: '0.01',
      // 	订单标题
      subject: 'xxxx',
      // passbackParams: encodeURIComponent(JSON.stringify({ id: 1 })),
    })

alipay.trade.app.pay 接口问题

使用最新版本,调用alipay.trade.app.pay就报 [AlipaySdk]HTTP 请求错误, 调用其他接口正常,比方付款到支付宝

验签怎么用

通知验签的,请问怎么用?
文档就一行const verify = sdk.checkNotifySign(postData);
我把req.body的数据塞进去,一直返回false

checkNotifySign 通知验签默认使用的sign_type是RSA

对接了生活缴费的业务,支付宝的通知消息默认使用的是RSA方式加签。不知道是否所有通知方式的都是这样,是的话可以改下验签的默认方式。const signType = postData.sign_type || 'RSA';

版本问题

请问有没有alpay-sdk js版本的?ts用起来不太顺手。

【失败】支付宝Nodej创建订单报错

我在开发支付接口。最近建的app 201908xxxx没有问题。但是如果是旧的app 201812xxxx就会报错。我用php代码来运行的话,新旧的app都可以创建支付宝订单。

我尝试修改其中一个参数;改为 signType: 'RSA'。但是还是旧的app依然下面的错误。不知道是否遇到类似的情况?谢谢!

{ Error: error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag
at Sign.sign (internal/crypto/sig.js:84:29)
at Object.sign (/xxxx-backend/node_modules/alipay-sdk/lib/util.ts:56:46)
at AlipaySdk.exec (/xxxx-backend/node_modules/alipay-sdk/lib/alipay.ts:333:22)
at Function.aliyunPrecreate (/xxxx-backend/src/controller/alipay.ts:181:35)
at processTicksAndRejections (internal/process/next_tick.js:81:5)
opensslErrorStack:
[ 'error:04093004:rsa routines:old_rsa_priv_decode:RSA lib',
'error:0D08303A:asn1 encoding routines:asn1_template_noexp_d2i:nested asn1 error',
'error:0D06C03A:asn1 encoding routines:asn1_d2i_ex_primitive:nested asn1 error' ],

支持哪些api?

如题,预授权api支持吗?可以构造唤起支付宝客户端支付的请求吗?

页面类接口调用的问题

import AlipayFormData from 'alipay-sdk/lib/form';
const formData = new AlipayFormData();
文档中直接这样生成了实例 初始化也没有配置参数 这个公共参数和签名要自己处理吗? sdk有签名的方法吗?

怎么解密my.getPhoneNumber的加密内容?

{"response":"voCTGYUDyMV+oI6beut6cxnniJyhPGJA3o79HjSz/0ui/3nLpFZ07AkKl0NK4xs18HoiTlC3V9CvWh43Sdza7MNn2qZ4p9YvrsgHWK 1rKm9qEsFmP9mcyO347osrsrjKc9C4R9XBMe89Pe4llz9l8XKr0szCFhkXKANfD1j8eQVRNbpKiatotmpbUc5PWwlyX1ArVZ7FYZ3C6igH2Yp7hzzjjjml5qixQ+Rtx7jtxWRik3WSUzh8ToWKuKupQ7/IGupFxdWZCsXicr+RFqFUqBHzmVVhImHqsGMKyUBT18O04KmjAy4btepqxMhu7+x6jrBV9DbJ2oQ4D3ncu2OoR9gWY5U7otcXpsp i4G1PkBk=","sign":"iWck70SU2/LhzN76YP1qkY8H5fdpRzVVZqsLDI+YpBX2i5pSPcUqos64YDgzdUUQvTYPzcT4j+SrGCcl+bk1emwG8r7cmhOUKByeYhFWsSVMT6roQTCqAdI+z9UWTAg/rLyZIyxKYBxbxjXJ7m4q4eyNZ+MXoVx5nwA3hhFx6SRnYMCyXvhEt6ny1/PSuhkuPvXOFtUkIFQiE3Y0JVji 2tzHgrJO/M+lhsLl5/+3MZzNaIPQ/FB+rrx581O1TKQxN7PZ7KOq3I01fyDtb1YfIUWG56hqBzJBW9Ryc460JdpjrwBGdKTX2luoIks4E7CemPi9tFsjOGz4AEfEk9qQpA=="}

checkNotifySign 真的可用吗?

正式环境下, 各种尝试, 返回值永远都是 false.

默认配置传入 3 个参数: appId privateKey alipayPublicKey

做过以下尝试:

  1. 修改 signTypekeyType.
  2. 删除 postData 中的 sign_type.
  3. key 改为 camelCase.
  4. 使用英文 subject.
  5. 填写英文可选参数 body.

postData 如下:

{
    "gmt_create": "2019-05-15 10:51:20",
    "charset": "utf-8",
    "gmt_payment": "2019-05-15 10:51:30",
    "notify_time": "2019-05-15 10:54:03",
    "subject": "充值",
    "sign": "UcMKLbURJGhbOnS8rznkXB0oo9OD8U69RM9s8pJI3lj9aKGMdMqmcy2kSzTAmFdNGRLNCOR6Y3bkJEDy50yQzUCjWkT9XWEuvww0pS2kBCQHEJDhbpap85GdzcXMSyPxR0QK6bHOp1rIZLjAAxi6WTnoIgeQopha/BQQwme+fLYkW3CuQX7bkHEcHqjo2ybDYWIMawc1WhmVuh2IfrlgBk8SN/bgoDFErZyrpfxeeuBliGghjSHACwzQ5UDGEJYacv62EovzTjhcxOFRYNtZITKelSFIPzGZMSFmcxDtrl0VJrYaeFy7Ga/EWEE8lT4n+c5AY6jHFV5vsuMrBqkPcg==",
    "buyer_id": "2088002164762921",
    "invoice_amount": "0.01",
    "version": "1.0",
    "notify_id": "2019051500222105131062921023025563",
    "fund_bill_list": "[{\"amount\":\"0.01\",\"fundChannel\":\"ALIPAYACCOUNT\"}]",
    "notify_type": "trade_status_sync",
    "out_trade_no": "5cdb7e9357bb33765ad585a6",
    "total_amount": "0.01",
    "trade_status": "TRADE_SUCCESS",
    "trade_no": "2019051522001462921037601726",
    "auth_app_id": "2019051164518127",
    "receipt_amount": "0.01",
    "point_amount": "0.00",
    "app_id": "2019051164518127",
    "buyer_pay_amount": "0.01",
    "sign_type": "RSA2",
    "seller_id": "2088531212288547"
}

目前只能是采用 mapi 接口验证 notify_id 的单一方式来验证通知的真实性.

exec 方法抛异常

const AlipaySDK = require('alipay-sdk').default;
const fs = require('fs')

const alipaySdk = new AlipaySDK({
appId: '2018081661053647',
privateKey: fs.readFileSync(__dirname + '/../secretKey/private-key.pem', 'ascii'),
alipayPublicKey: fs.readFileSync(__dirname+'/../secretKey/public-key.pem', 'ascii'),
});
async function getAccessToken (auth_code,refreshToken) {
alipaySdk.exec('alipay.system.oauth.token', {
grantType: 'authorization_code',
code: auth_code,
refreshToken: ''
}).then(res => {
console.log(res);
}).catch((err) => {
console.log(err);
});
}

报异常

TypeError: [AlipaySdk]exec error
at WeakMap.set (native)
at mapObj (/Users/zhuangzihao/i-counting/customer_api/node_modules/map-obj/index.js:23:7)
at camelCaseConvert (/Users/zhuangzihao/i-counting/customer_api/node_modules/camelcase-keys/index.js:16:9)
at module.exports (/Users/zhuangzihao/i-counting/customer_api/node_modules/camelcase-keys/index.js:39:9)
at config.urllib.request.then (/Users/zhuangzihao/i-counting/customer_api/node_modules/alipay-sdk/lib/alipay.js:251:52)
at
at process._tickCallback (internal/process/next_tick.js:188:7)

Error: error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag

{ Error: error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag
at Sign.sign (internal/crypto/sig.js:83:26)
at Object.sign (d:\WorkPlace\nodes\node_modules\alipay-sdk\lib\util.js:49:34)
at AlipaySdk.exec (d:\WorkPlace\nodes\node_modules\alipay-sdk\lib\alipay.js:224:33)
at run (d:\WorkPlace\nodes\alipay\index.js:58:36)
at Object. (d:\WorkPlace\nodes\alipay\index.js:73:1)
at Module._compile (internal/modules/cjs/loader.js:688:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
at Module.load (internal/modules/cjs/loader.js:598:32)
at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
at Function.Module._load (internal/modules/cjs/loader.js:529:3)
opensslErrorStack:
[ 'error:04093004:rsa routines:old_rsa_priv_decode:RSA lib',
'error:0D08303A:asn1 encoding routines:asn1_template_noexp_d2i:nested asn1 error',
'error:0D06C03A:asn1 encoding routines:asn1_d2i_ex_primitive:nested asn1 error' ] }

关于代码中的console输出

能否把alipay-sdk-nodejs/lib/alipay.ts中的console.log的输出去掉或者做一个开关变量来进行设置, 现在直接打印出来,在处理我自己的日志时会有影响

网站发起支付 alipay.trade.page.pay(统一收单下单并支付页面接口) ,sdk的返回处理有问题

我在沙盒环境调试的代码,确认调用成功了。调用代码如下:

const AlipaySdk = require('alipay-sdk').default;

const alipaySdk = new AlipaySdk({
appId: config.ali_appId,
privateKey: fs.readFileSync(config.ali_keyPath, 'ascii'),
alipayPublicKey: fs.readFileSync(config.ali_publicKeyPath, 'ascii'),
gateway: 'https://openapi.alipaydev.com/gateway.do'
});

//调用统一收单下单并支付页面接口
async function createTransaction(order) {
let biz_content = {
out_trade_no : order.orderId,
product_code : 'FAST_INSTANT_TRADE_PAY',
subject: '华盛顿包车1日', //order.name
total_amount: order.price.toConsumer,
};

const alipayMethod = 'alipay.trade.page.pay';
const alipayParams = {
return_url: return_url,
notify_url: notify_url,
biz_content: JSON.stringify(biz_content)
};
const alipayOptions = {
log: logger,
};

try {
const result = await alipaySdk.exec(alipayMethod, alipayParams, alipayOptions);
console.log(' ----------------------------------------------------------- ');
console.log(result);
console.log(' ----------------------------------------------------------- ');
} catch (err) {
console.log('err =' + JSON.stringify(err, null, 2));
}
return result;
}

服务器返回的302 redirect 信息被SDK处理成了错误, 进入了err的处理。
错误日志打印如下:

0|sellerBa | 2019-07-18 10:33 +08:00: err ={
0|sellerBa | "serverResult": {
0|sellerBa | "data": "",
0|sellerBa | "status": 302,
0|sellerBa | "headers": {
0|sellerBa | "server": "Tengine/2.1.0",
0|sellerBa | "date": "Thu, 18 Jul 2019 02:33:07 GMT",
0|sellerBa | "content-type": "application/octet-stream",
0|sellerBa | "connection": "keep-alive, keep-alive",
0|sellerBa | "set-cookie": [
0|sellerBa | "zone=GZ00B; Domain=.alipaydev.com; Path=/",
0|sellerBa | "JSESSIONID=4AB5080B689646890ED9C86165DF39E1; Path=/; HttpOnly",
0|sellerBa | "ALIPAYJSESSIONID=GZ001D1YdXp3guiwtCdXdr9TYuLakPsuperapiGZ00; Domain=.alipaydev.com; Path=/",
0|sellerBa | "ctoken=xRBJpHY1rBZb-1Ta; Domain=.alipaydev.com; Path=/",
0|sellerBa | "spanner=r7Gde3HSucXTedbI2QGl1ewBN9Uv8Bn2Xt2T4qEYgj0=;path=/;secure;"
0|sellerBa | ],
0|sellerBa | "location": "http://unitradeprod.alipaydev.com/appAssign.htm?alipay_exterface_invoke_assign_target=invoke_bf9b4b35983b19c4ad87e1dc4be1aebe&alipay_exterface_invoke_assign_sign=_r_i_fog9u_gu_th_u_qt0_v_y_rkg%2F1u_z8_i_ye2b9p_rv_eydoj1w_t5_j_z_r4n7_e_oyu_a%3D%3D",
0|sellerBa | "content-length": "0",
0|sellerBa | "via": "gateway-2-1-3.daily.alipay.net[302],11.166.43.162:80[302]"
0|sellerBa | },
0|sellerBa | "res": {
0|sellerBa | "status": 302,
0|sellerBa | "statusCode": 302,
0|sellerBa | "statusMessage": "Found",
0|sellerBa | "headers": {
0|sellerBa | "server": "Tengine/2.1.0",
0|sellerBa | "date": "Thu, 18 Jul 2019 02:33:07 GMT",
0|sellerBa | "content-type": "application/octet-stream",
0|sellerBa | "connection": "keep-alive, keep-alive",
0|sellerBa | "set-cookie": [
0|sellerBa | "zone=GZ00B; Domain=.alipaydev.com; Path=/",
0|sellerBa | "JSESSIONID=4AB5080B689646890ED9C86165DF39E1; Path=/; HttpOnly",
0|sellerBa | "ALIPAYJSESSIONID=GZ001D1YdXp3guiwtCdXdr9TYuLakPsuperapiGZ00; Domain=.alipaydev.com; Path=/",
0|sellerBa | "ctoken=xRBJpHY1rBZb-1Ta; Domain=.alipaydev.com; Path=/",
0|sellerBa | "spanner=r7Gde3HSucXTedbI2QGl1ewBN9Uv8Bn2Xt2T4qEYgj0=;path=/;secure;"
0|sellerBa | ],
0|sellerBa | "location": "http://unitradeprod.alipaydev.com/appAssign.htm?alipay_exterface_invoke_assign_target=invoke_bf9b4b35983b19c4ad87e1dc4be1aebe&alipay_exterface_invoke_assign_sign=_r_i_fog9u_gu_th_u_qt0_v_y_rkg%2F1u_z8_i_ye2b9p_rv_eydoj1w_t5_j_z_r4n7_e_oyu_a%3D%3D",
0|sellerBa | "content-length": "0",
0|sellerBa | "via": "gateway-2-1-3.daily.alipay.net[302],11.166.43.162:80[302]"
0|sellerBa | },
0|sellerBa | "size": 0,
0|sellerBa | "aborted": false,
0|sellerBa | "rt": 467,
0|sellerBa | "keepAliveSocket": false,
0|sellerBa | "data": "",
0|sellerBa | "requestUrls": [
0|sellerBa | "https://openapi.alipaydev.com/gateway.do?method=alipay.trade.page.pay&app_id=2016100100642440&charset=utf-8&version=1.0&sign_type=RSA2&timestamp=2019-07-18%2010%3A33%3A06&return_url=https%3A%2F%2Fd.kwibon.cn&notify_url=https%3A%2F%2Fd.kwibon.cn%2FsellerBackend%2Fapi%2Falipay%2FnotifyUrl&sign=Wp4xWdoB41AlgfdwbK2EEySLWF7mYTDm6hbJZ2pScBGNQJZOKr7npSUR%2FMG%2FW%2F6cuiK9%2FXDLjR0bea4cjBaBYXdMGOi2h0%2F7cw0OC2bWicz8AV3yV1M91GFn7X%2BC9ypMEKU2WDGlhaEzGCoD0cFZo89u6EAQRI%2FRWbwEcaktd8irRty0G%2Fobd6cER8QlWDMi4AkVxgbQQGamiJmPntM9KGauTf%2F4W6ciN5yJcXn9i4rs57W2uo3LRXSfRrgF%2BgdTyOoKovEnMMf6vP04e2jLxv7bA9Z3nReu1Qqw9fV68S4KHKN52Cs9zliUNGYpBRpDGibvhZf25LAcrvCniJI2xQ%3D%3D"
0|sellerBa | ],
0|sellerBa | "timing": null,
0|sellerBa | "remoteAddress": "198.11.186.9",
0|sellerBa | "remotePort": 443,
0|sellerBa | "socketHandledRequests": 1,
0|sellerBa | "socketHandledResponses": 1
0|sellerBa | }
0|sellerBa | },
0|sellerBa | "errorMessage": "[AlipaySdk]HTTP 请求错误"
0|sellerBa | }

下单出现 ret.status === 200,ret.data 是个 html 的情况,然后 JSON.parse(ret.data)出问题

// egg app/extend/application.js

  async getAlipayClient() {
    if (!this[ALIPAY]) {
      // this.config.alipay.notifyUrl = await this.createAnonymousContext().serverRequest.getServiceUrl('ms-order') + '/order/payNotify/alipay';
      this[ALIPAY] = new AlipaySdk(this.config.alipay);
    }
    return this[ALIPAY];
  },

// 下单代码

      const ali = await ctx.app.getAlipayClient();
      const notifyUrl = await ctx.serverRequest.getServiceUrl('ms-order') + '/order/payNotify/alipay';
      const bizContent = {
        subject: order.title,
        timeoutExpress: '10m',
        totalAmount: String(order.amount),
        outTradeNo: orderSn,
      };
      let result = {};
      if (query.alipayMode === 'APP') {
        result = {
          payData: await ali.exec('alipay.trade.app.pay', {
            notifyUrl,
            charset: 'GBK',
            bizContent,
          }),
        };

Debug 如下图所示:

5EC9EAF3-EE07-4A9C-BB77-6C3CF827CDB9

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.