如果你的应用想接入支付宝,让用户可以在应用内部直接支付,你可以看下这篇文档和开源项目,也许会给你带来一些帮助。

项目:172https://github.com/leancloud/cloud-code-alipay172

了解支付宝「即时到账收款」

在尝试该项目之前,你需要了解支付宝「即时到账收款」这个功能:

  • 相关的介绍在这里:即时到帐收款59
  • 确认自己有「企业支付宝账号(不含个体工商户)」
  • 了解整个流程是什么样子的

然后就可以继续了。

安装

下载代码:

git clone git@github.com:leancloud/cloud-code-alipay.git

修改支付宝相关的配置 cloud/config/alipay.js

module.exports = {
  sign_type: 'MD5',
  alipay_gateway: 'https://mapi.alipay.com/gateway.do?',
  https_verify_url: 'https://mapi.alipay.com/gateway.do?service=notify_verify&',
  partner: '2088000000000000',
  key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  notify_url: 'http://xxx.avosapps.com/pay/notify',
  return_url: 'http://xxx.avosapps.com/pay/return'
}
  • alipay_gateway: 支付宝网关,一般情况默认即可。
  • https_verify_url: 支付宝回调验证 url,一般情况默认即可。
  • partner: 合作者身份(PID),2088 开头的 16 位数字,可以在支付宝网站查找: https://b.alipay.com/order/pidAndKey.htm22
  • key: 安全校验码,数字加字幕的字符串,可以在支付宝网站查找: https://b.alipay.com/order/pidAndKey.htm22
  • notify_url: 支付宝异步通知 url,二级域名根据 LeanCloud 云代码配置而定。
  • return_url: 支付宝同步通知 url,二级域名根据 LeanCloud 云代码配置而定。

部署

配置 LeanCloud appId 和 appKey

avoscloud app add <projectName> <appId>

切换目标应用

avoscloud checkou <projectName>

部署应用到测试环境和生产环境

avoscloud deploy && avoslcoud publish

提示: 过程中可能会提示输入 masterKey。

如果没有错误,请打开浏览器,根据自己的二级域名键入网址:

http://<yourPath>.avosapps.com

如果看到「支付宝即时到账交易接口」的页面,恭喜你,部署成功!

感受一下

  1. 在「支付宝即时到账交易接口」的测试页面,输入相关信息。注意:「卖家支付宝账户」需要和「partner」对应;金额可以输入 0.01 (表示支付 1 分钱)来进行尝试。输入完成后点击确认。
  2. 你将看到跳转到支付宝页面,输入自己的支付宝账号和支付密码等完成支付。
  3. 支付完成后会跳转回我们自己的应用页面,并显示 验证结果:true。支付流程结束。当然,你的 1 分钱也转到了对应的卖家账户 wink

开发相关

文件说明

  • cloud/app.js: 支付宝相关请求路由。
  • cloud/alipay.js: 支付宝相关签名验证,生成跳转等逻辑。

路由信息

  • GET /: 静态首页 public/index.html
  • POST /pay: 接受表单信息、签名,并准备跳转到支付宝。
  • GET /pay/return: 等待支付宝同步回调,并验证调用方是否真正来自支付宝。
  • POST /pay/notify:等待支付宝异步回调,并验证调用方是否真正来自支付宝。
2 人赞了这个帖子.

本主题已置顶,它将始终显示在它所属分类的顶部。可由职员对所有人解除置顶,或者由用户自己取消置顶。

本主题已被解除置顶,它将不再显示在它所属分类的顶部。

我有几个问题:

  1. 这个是支付宝的即时到帐, 在申请前需要商家提供建好的网站,可是ios应用能用吗?

  2. 如果能够在ios app里使用,那么怎么才能触发开始支付的流程呢,是还需要在main.js里面定义方程,然后客户端直接call这个方程来实现?

  3. 希望有更详细的tutorials!!!

notify接口无效,日志显示

notify params: {}

无论是使用req.params还是req.body都不行。

建议直接把 req 输出一下,看看请求到底是什么样子的。

由于notify不能通知到localhost,日志只能在控制台看,req实在太长,显示不完整

麻烦私信我你的 appId,我也看下。

发现问题了,支付宝发过来的content-type不对,application/x-www-form-urlencoded; text/html; charset=utf-8,多了后面的 text/html; charset=utf-8,导致bodyParser无法获取body。

这实在是太坑了!

在app.js的app.use(bodyParser.json());前面加上下面的代码就OK了。

// 避开支付宝挖的坑
app.use(function(req, res, next){
    if(req.url == '/pay/notify' && req.get('content-type') !== 'application/x-www-form-urlencoded') {
        req.headers['content-type'] = 'application/x-www-form-urlencoded';
    }

    next();
});

看了支付宝的支付产品,正如1151所述商家需要建网站的,只不过现在的网站是安在leancloud上,ios / android 需要商家购买 移动无线支付 产品吧,这样需要下载ios / android 的sdk,集成到你的app里。如果有这样的tutorial最好了,希望leancloud上的同学能分享一些, leancloud只是做为存储app应用里的商品,说得这,我想搭车请教各大神,多个用户同时访问同一商品,这并发控制,leancloud怎么控制的?

移动支付的这么多,放的案例确是一个web的。

请问 APP集成三方支付,在leancloud需要写网站托管和云引擎吗

请问 ,notify_url 怎么配置啊