收藏
回答

接口/v3/pay/partner/transactions/jsapi下单后小程序调起支付失败

收付通微信小程序调用接口/v3/pay/partner/transactions/jsapi下单后,微信小程序能够正常调起提示“支付验证签名失败”

我的请求参数如下:

{

  "sp_appid": "wx64a3bxxxxx",

  "sp_mchid": "1634xxxx",

  "sub_mchid": "1702xxxx",

  "description": "订单分次支付-翡翠手镯",

  "out_trade_to": "5eFgWsxxxXQkjdQLdn0_xxxx",

  "time_expire": "2025-03-16T16:01:44+08:00",

  "attach": "orderPay^miniProgram^250313xxx616",

  "notify_url": "https://notify.xxxx.com/wallets/v3/wechat_notify",

  "amount": {

    "total": 650000

  },

  "payer": {

    "sp_openid": "o_kEl0ayxxxxxxxxxxxy23VfSbIs"

  },

  "settle_info": {

    "profit_sharing": true

  }

}

回答关注问题邀请回答
收藏

2 个回答

  • 喜雨
    喜雨
    03-21

    用生成的去调起,还是失败

    03-21
    有用
    回复
  • Memory (私信不回复)
    Memory (私信不回复)
    03-13

    小程序和公众号调起支付参数是不同的,注意一下参数格式和大小写

    更新示例代码:

    const { Wechatpay } = require('wechatpay-axios-plugin');
    const { readFileSync } = require('fs');
    
    
    // 商户号,支持「普通商户/特约商户」或「服务商商户」
    const merchantId = '你的服务商商户号';
    
    
    // 「商户API证书」的「证书序列号」
    const merchantCertificateSerial = '对应的证书序列号';
    
    
    // 从本地文件中加载「商户API私钥」,用于生成请求的签名
    const merchantPrivateKeyFilePath = '/Users/memory/Downloads/wechatpay-axios/apiclient_key.pem';
    const merchantPrivateKeyInstance = readFileSync(merchantPrivateKeyFilePath);
    
    
    // 从本地文件中加载「微信支付平台公钥」,用来验证微信支付应答的签名
    const platformPublicKeyFilePath = '/Users/memory/Downloads/wechatpay-axios/apiclient_key.pem';
    // 这里可先配置为和api证书一样的路径
    const platformPublicKeyInstance = readFileSync(platformPublicKeyFilePath);
    
    
    // 「微信支付平台公钥」的「平台公钥ID」
    // 需要在 商户平台 -> 账户中心 -> API安全 查询
    const platformPublicKeyId = 'PUB_KEY_ID_01142321349124100000000000********';
    // 这里可以先随便写个假的或者保持上面的不变
    
    
    // 构造一个 APIv3 客户端实例(微信支付公钥模式)
    const wxpay = new Wechatpay({
      mchid: merchantId,
      serial: merchantCertificateSerial,
      privateKey: merchantPrivateKeyInstance,
      certs: {
        [platformPublicKeyId]: platformPublicKeyInstance,
      },
    });
    
    
    const { Formatter, Rsa } = require('wechatpay-axios-plugin');
    // 自定义 appId 和 package
    const appId = '替换你调起支付的APPID'; // 替换为你想要的 appId
    const prepay_id = '替换为你的预支付ID'; // 替换为你想要的 package
    
    
    const nonceStr = Formatter.nonce();
    const timeStamp = '' + Formatter.timestamp();
    const packageStr = 'prepay_id=' + prepay_id;
    const data = {
      appId,
      timeStamp,
      nonceStr,
      package: packageStr,
      signType: 'RSA',
      paySign: Rsa.sign( 
        Formatter.joinedByLineFeed(appId, timeStamp, nonceStr, packageStr),
        merchantPrivateKeyInstance
      )
    }
    
    
    // 打印输出 data
    console.log(data);
    
    03-13
    有用
    回复 35
    查看更多(30)
登录 后发表内容