alipay / alipay-sdk-nodejs-all

支付宝开放平台 Alipay SDK for Node.js
https://docs.open.alipay.com/54/103419/
Other
405 stars 61 forks source link

alipay.trade.app.pay 返回302 #74

Closed blair319 closed 1 year ago

blair319 commented 3 years ago
const result = await alipaySdk.exec('alipay.trade.app.pay',
            {
                charset: 'utf-8',
                sign_type: 'RSA2',
                timestamp: FormatDayStr(),
                version: "1.0",
                notify_url: "https://.。。。。",
                bizContent: {
                    total_amount: "1.00",
                    subject: "viptest",
                    out_trade_no: new Date().getTime() + ""
                },
            },

但是 返回 302 为什么

serverResult: { data: '', status: 302, headers: { server: 'Tengine/2.1.0', date: 'Mon, 17 Aug 2020 10:23:40 GMT', 'content-length': '0', connection: 'keep-alive', 'set-cookie': [Array], location: 'http://openapi.alipay.com/none?alipay_exterface_invoke_assign_target=invoke_82f74943ca11dcfee78f0f8d380e263b&alipay_exterface_invoke_assign_sign=_fdj_w14_a_gs_x4_t_hu4c_b_z_f_ql6_z0_rt_w_a2t_e9_cb_b_j_pfp_g_ya_mq1c_t_xf5_z_o_ig%3D%3D', via: 'spanner-internet-5403.sa127[302]' }, res: { status: 302, statusCode: 302, statusMessage: 'Found', headers: [Object], size: 0, aborted: false, rt: 393, keepAliveSocket: false, data: '', requestUrls: [Array], timing: null, remoteAddress: '110.75.244.202', remotePort: 443, socketHandledRequests: 1, socketHandledResponses: 1 } }, errorMessage: '[AlipaySdk]HTTP 请求错误' }

miaoihan commented 3 years ago

同样的问题,希望阿里node的同学出来说一下

gzlock commented 3 years ago

过来人说一下 我一开始也是这样操作的,也是Http请求错误,直到搜索到了这个issue #21 解决了我的疑问。 但是这个issue有一步没有说到,这里直接贴一下代码,注意是typescript格式

import { sign } from 'alipay-sdk/lib/util'
import AliPaySdk from 'alipay-sdk'

const sdk = new AliPaySdk({
  appId,
  privateKey,
})

// 不需要向支付宝服务器发起请求
// 而是用sign函数根据传入的参数生成签名后的数据
const data = sign('alipay.trade.app.pay', {
  notifyUrl: 'https://...',
  bizContent: {
    subject: '商品标题',
    totalAmount: '0.01',
    outTradeNo: 'abc',
    productCode: 'QUICK_MSECURITY_PAY',
  },
}, sdk.config)

// #21 issue没有说到这一步
// 我从支付宝文档看到【参数组装】得到的启发
// https://opendocs.alipay.com/open/01dcc0#%E8%AF%B7%E6%B1%82%E7%A4%BA%E4%BE%8B
// 再把签名后的数据生成url参数格式字符串就可以用来唤起支付宝了
// 这个字符串的格式类似:a=1&b=2&c=3
const payInfo = new URLSearchParams(data).toString()

console.log('payInfo', payInfo)
// 把payInfo传给你们的App,App再使用payInfo字符串唤起支付宝App就可以了
// 亲测成功唤起支付宝,商品名称和付款金额都符合预设
zhky126349z commented 3 years ago

过来人说一下 我一开始也是这样操作的,也是Http请求错误,直到搜索到了这个issue #21 解决了我的疑问。 但是这个issue有一步没有说到,这里直接贴一下代码,注意是typescript格式

import { sign } from 'alipay-sdk/lib/util'
import AliPaySdk from 'alipay-sdk'

const sdk = new AliPaySdk({
  appId,
  privateKey,
})
const data = sign('alipay.trade.app.pay', {
  notifyUrl: 'https://...',
  bizContent: {
    subject: '商品标题',
    totalAmount: '0.01',
    outTradeNo: 'abc',
    productCode: 'QUICK_MSECURITY_PAY',
  },
}, sdk.config)

// #21 issue没有说到这一步
// 我从支付宝文档看到【参数组装】得到的启发
// https://opendocs.alipay.com/open/01dcc0#%E8%AF%B7%E6%B1%82%E7%A4%BA%E4%BE%8B
const payInfo = new URLSearchParams(data).toString()

console.log('payInfo', payInfo)
// 把payInfo传给你们的App,App再使用payInfo字符串唤起支付宝App就可以了
// 亲测成功唤起支付宝,商品名称正确,付款金额正确

牛批!好使!

Doflatango commented 3 years ago

过来人说一下 我一开始也是这样操作的,也是Http请求错误,直到搜索到了这个issue #21 解决了我的疑问。 但是这个issue有一步没有说到,这里直接贴一下代码,注意是typescript格式

import { sign } from 'alipay-sdk/lib/util'
import AliPaySdk from 'alipay-sdk'

const sdk = new AliPaySdk({
  appId,
  privateKey,
})

// 不需要向支付宝服务器发起请求
// 而是用sign函数根据传入的参数生成签名后的数据
const data = sign('alipay.trade.app.pay', {
  notifyUrl: 'https://...',
  bizContent: {
    subject: '商品标题',
    totalAmount: '0.01',
    outTradeNo: 'abc',
    productCode: 'QUICK_MSECURITY_PAY',
  },
}, sdk.config)

// #21 issue没有说到这一步
// 我从支付宝文档看到【参数组装】得到的启发
// https://opendocs.alipay.com/open/01dcc0#%E8%AF%B7%E6%B1%82%E7%A4%BA%E4%BE%8B
// 再把签名后的数据生成url参数格式字符串�就可以用来唤起支付宝了
// 这个字符串的格式类似:a=1&b=2&c=3
const payInfo = new URLSearchParams(data).toString()

console.log('payInfo', payInfo)
// 把payInfo传给你们的App,App再使用payInfo字符串唤起支付宝App就可以了
// 亲测成功唤起支付宝,商品名称和付款金额都符合预设

早点加到文档里面,每个人都可以少加半天班

dafanzhi commented 3 years ago

我们也遇到相同的问题,需要从移动网页发起支付,没有native app。所以请求官方务必解决这个问题,否则公司关于nodejs技术路线严重受阻! 求官方提供完整严谨的 移动网页支付 demo!

dafanzhi commented 3 years ago

起步都掉不通,230 个 star 是怎么来的?这个issue 都5 个月了没解决,你们提供 sdk 不是真心想让他跑起来吗?

yuxiaolejs commented 3 years ago

我是身份核验的接口调不通,裂开了nodesdk和*山一样

hanyu363 commented 1 year ago

过来人说一下 我一开始也是这样操作的,也是Http请求错误,直到搜索到了这个issue #21 解决了我的疑问。 但是这个issue有一步没有说到,这里直接贴一下代码,注意是typescript格式

import { sign } from 'alipay-sdk/lib/util'
import AliPaySdk from 'alipay-sdk'

const sdk = new AliPaySdk({
  appId,
  privateKey,
})

// 不需要向支付宝服务器发起请求
// 而是用sign函数根据传入的参数生成签名后的数据
const data = sign('alipay.trade.app.pay', {
  notifyUrl: 'https://...',
  bizContent: {
    subject: '商品标题',
    totalAmount: '0.01',
    outTradeNo: 'abc',
    productCode: 'QUICK_MSECURITY_PAY',
  },
}, sdk.config)

// #21 issue没有说到这一步
// 我从支付宝文档看到【参数组装】得到的启发
// https://opendocs.alipay.com/open/01dcc0#%E8%AF%B7%E6%B1%82%E7%A4%BA%E4%BE%8B
// 再把签名后的数据生成url参数格式字符串�就可以用来唤起支付宝了
// 这个字符串的格式类似:a=1&b=2&c=3
const payInfo = new URLSearchParams(data).toString()

console.log('payInfo', payInfo)
// 把payInfo传给你们的App,App再使用payInfo字符串唤起支付宝App就可以了
// 亲测成功唤起支付宝,商品名称和付款金额都符合预设

早点加到文档里面,每个人都可以少加半天班

我他妈的加了2天班。。就研究这个请求签名。咋就过不去呢。。。我日日日日日日。 原来就只要服务器产生完参数和签名。就发回客户端就行了。。。。这尼玛坑踩的真踏实。。

assmdx commented 1 year ago

过来人说一下 我一开始也是这样操作的,也是Http请求错误,直到搜索到了这个issue #21 解决了我的疑问。 但是这个issue有一步没有说到,这里直接贴一下代码,注意是typescript格式

import { sign } from 'alipay-sdk/lib/util'
import AliPaySdk from 'alipay-sdk'

const sdk = new AliPaySdk({
  appId,
  privateKey,
})

// 不需要向支付宝服务器发起请求
// 而是用sign函数根据传入的参数生成签名后的数据
const data = sign('alipay.trade.app.pay', {
  notifyUrl: 'https://...',
  bizContent: {
    subject: '商品标题',
    totalAmount: '0.01',
    outTradeNo: 'abc',
    productCode: 'QUICK_MSECURITY_PAY',
  },
}, sdk.config)

// #21 issue没有说到这一步
// 我从支付宝文档看到【参数组装】得到的启发
// https://opendocs.alipay.com/open/01dcc0#%E8%AF%B7%E6%B1%82%E7%A4%BA%E4%BE%8B
// 再把签名后的数据生成url参数格式字符串�就可以用来唤起支付宝了
// 这个字符串的格式类似:a=1&b=2&c=3
const payInfo = new URLSearchParams(data).toString()

console.log('payInfo', payInfo)
// 把payInfo传给你们的App,App再使用payInfo字符串唤起支付宝App就可以了
// 亲测成功唤起支付宝,商品名称和付款金额都符合预设

论文档水平的重要性。。。。。。。。官方文档辣眼睛

troyeagle commented 1 year ago

3.3.0+ 已经修复了这个问题,并做了文档补充。如有疑问可以在开放社区反馈,或者继续留言,感谢。

const orderStr = sdk.sdkExec('alipay.trade.app.pay', {
  bizContent: {
    out_trade_no: "ALIPfdf1211sdfsd12gfddsgs3",
    product_code: "FAST_INSTANT_TRADE_PAY",
    subject: "abc",
    body: "234",
    total_amount: "0.01"
},
  returnUrl: 'https://www.taobao.com'
})