终于把3.0版本做好了。从今天开始好好写文档,让大家做支付做的开心点。

项目GitHub地址:https://github.com/helei112g/payment

从2016年6月payment做出来,到这一版本(3.0),坚持了快一年啦。感谢这期间给我支持(打赏与协作)的人。

Payment 主要针对支付宝支付、微信支付的接口进行了聚合。开发者无需重复集成繁琐的支付接口,使用 Payment 就能应对所有支付场景,快速接入支付功能。

Payment 针对不同支付服务商的接口,提供了统一的调用方式,并且内部将签名、验签进行了集成,使用者只需要喂数据然后拿到结果进行自己的业务即可。完全屏蔽支付宝与微信内部繁杂的细节。只要按照我的文档操作,10分钟可完成支付流程。

当前 Payment 基本接入完支付宝与微信的资金相关接口。到当前为止,Payment SDK 主要支持功能如下:

支持的支付宝相关接口清单:

  • 即时到账功能(主要用于pc上支付)
  • 手机网站支付(WAP支付)
  • APP支付(移动支付)
  • 当面付(扫码支付与条码支付)
  • 交易查询(支付订单查询接口)
  • 退款接口(完成支付的订单,可通过该接口完成退款)
  • 退款查询接口(退款接口需要通过该接口进行查询状态)
  • 单笔转账到支付宝账户接口(只能转到用户支付宝帐号)
  • 转账订单查询接口(查询转账订单状态)

ps: 支付宝接口从 payment 3.0 开始,仅支持支付宝新版本接口。

支持的微信支付相关接口清单:

  • 手机网站支付(H5支付,特殊商家可用)
  • APP支付(移动支付)
  • 公众号支付
  • 刷卡支付(类似支付宝的条码支付)
  • 小程序支付
  • 交易查询(支付订单查询)
  • 申请退款接口
  • 查询退款接口
  • 企业付款给个人接口
  • 查询企业付款接口

微信最糟糕的就是,不同支付接口,需要申请不同的商户号。这里简单总结一下:

APP支付 必须到 微信开放平台申请一个应用,然后去申请开通支付功能,申请的商户帐号无法用于 公众号支付与小程序支付。

公众号支付 必须首先有一个认证的服务号,然后到公众号后台进行申请开通支付功能。又会获得一个商户号

小程序支付 微信分配的小程序ID,所以恭喜你,你又有了一个商户号

至于其他支付,目前检测好像可用共享。也就只剩下一个刷卡支付了。


本文主要讲解支付宝的配置文件,配置清单如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
return [
'use_sandbox' => true,

'partner' => '2088102169252684',
'app_id' => '2016073100130857',
'sign_type' => 'RSA2',

'ali_public_key' => 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAU3GYXkAaumdWQt7IDAQAB',
'rsa_private_key' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'rsa_private_key.pem',

'limit_pay' => [
//'balance',
//'moneyFund',
// ... ...
],

'notify_url' => 'https://helei112g.github.io/',
'return_url' => 'https://helei112g.github.io/',

'return_raw' => false,
];

在支付中最麻烦的就是配置密钥。这里逐一为大家说明每一个配置的含义、以及如何进行设置。
其中 是否必须 列表中如果标记为 ,则该项必须设置,否则sdk将无法得到结果。

参数 类型 是否必须 说明
use_sandbox boolean 是否开启沙箱模式
partner string 商户UID,以2088开头
app_id string 支付宝分配给开发者的应用ID
sign_type string 签名方式
ali_public_key string 支付宝公钥
rsa_private_key string 用户应用私钥
limit_pay string 限制的支付方式
notify_url string 支付宝异步通知的服务器地址
return_url string 支付报支付成功返回地址
return_raw boolean 是否返回支付宝原始数据

接下来对每一个参数详细说明,不同的设置带来的不同效果。

use_sandbox 支付宝新版本提供了沙箱模式。如果该选项设置为 true 则使用支付宝的沙箱功能。
下面简单介绍沙箱的使用方式。

首先登陆 蚂蚁金服开放平台 按照下图找到自己的沙箱应用。

image

image

大家注意截图,重要的配置信息均来自这里。

partner 对应图中的 商户UID,如果是正式应用,可用在【我的应用】=》【应用】中找到对应的信息。
这部分信息较敏感,就不截图了。

app_id 就是对应的创建的应用的id。图中有很醒目的字标记。

sign_type 请求支付时,数据加密的方式,目前支持RSA2和RSA,推荐使用RSA2。你完全不用管签名的实现,只需要这里做一下配置就好。

接下来,密钥的配置是重点,70% 的支付无法成功的原因,均是密钥设置问题。
关于密钥如何生成与配置,请看

支付宝官方密钥生成与配置教程

ali_public_key 注意看这张图的红线部分,只要上传自己应用的公钥后,可用点这里,查看支付宝公钥,可获取到支付宝的公钥。

image

这里一定要记得是 支付宝的公钥,不是你自己本地生成的,而是在开发平台中上传自己的公钥后,拿到的支付宝公钥。

接下来就是这个配置该如何填写了。这里支持文件的方式,你可以将支付宝公钥复制到一个单独的文件,然后这个字段填写对应文件的路径。例如:

1
'ali_public_key' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'alipay_public_key_rsa.pem'

你也可用直接将支付宝公钥的值,填入这里,例如:

1
'ali_public_key' => 'MIIBIjANBgkqhkiG9w0BAQEFAAOO1BU3GYXkAaumdWQt7f+khoFoSw+x8yqQIDAQAB',

这里为了文章排版美观,有删减部分支付宝公钥内容

无论那种方式,强烈建议在填入时,去掉:

—–BEGIN PUBLIC KEY—–
以及 —–END PUBLIC KEY—– 只保留中间部分的内容。

rsa_private_key 商户私钥的设置,按照上面发的教程)进行操作,然后把获取到的值,复制出来。跟支付宝公钥一样,也可以单独放在一个文件里,然后引用他的路径,或者直接将它的值,设置在这个字段上。

请记得只保留密钥内容部分。

这里请一定分清楚 私钥,是商户自己生成的公钥,是支付宝开发平台看到的

limit_pay 在让用户使用支付宝支付过程中,可能想禁止用户使用某些渠道,比如:不准使用 信用卡支付 不准使用 花呗支付。都可以在这里进行配置。详细的可取值,请看图片

image

官方链接

notify_url 异步通知。当支付宝支付成功后,你想要在服务端收到支付宝支付成功的通知,就必须设置该选项。应该是:http/https 开头的url。

这里强烈建议以支付宝服务器的通知为依据来判断是否支付成功。关于异步通知的处理,在后面的文章将有专题讲解。

return_url 当前主要是即时到账、手机网站支付两个接口会用到,在支付成功后,跳转到哪一个链接。也必须是以 HTTP/HTTPS 开头的url。可以理解为同步通知,但请不要以它的结果为准。为了安全还是应该以异步为准。

return_raw 之前的版本都没有该参数,是3.0新加入的,它的主要目的是让调用者控制自己拿到什么样的数据。如果设置为true。SDK 则只会向支付宝发出请求,收到数据后进行验签,通过后,会以数组的形式将所有支付宝返回的数据返回给客户端。

如果设置为false ,则会抛弃支付宝的某些字段。并且会对某些字段名称进行重新映射,这种方式带来的好处是,可用确保支付宝、微信返回的数据是基本一致的,但是可能导致调用者损失部分信息。这里大家根据实际情况进行衡量。

至此,支付宝的配置全部讲解完毕。 去看看如何完成即时到账