Pay
<br/>
>i 本文档的最新修订日期是:
> **2022-07-20**
# Pay
## 声明
下述的「支付宝支付」、「微信公众平台」、「微信支付」等产品和产品名称的相关权利归其法定权利人所有。
## 模块简述
通过第三方支付平台提供的接口,实现在线支付。目前支持支付宝支付和微信支付。
## 依赖
本模块依赖于基础模块 <font color="#c7254e">`Tool`</font> 。
## 模块配置
配置文件位于 <font color="#c7254e">`/config/core/Pay.php`</font> 。
* **<font color="#ff6600">`timeout`</font>** <font color="#0099ff">`(Int)`</font> <font color="#BBBBBB">`15`</font>:
用以指定超时时间。
值的单位为秒(s)。
* **<font color="#ff6600">`aliPid`</font>** <font color="#0099ff">`(String)`</font> <font color="#bbbbbb">`''`</font> :
在支付宝商家平台所获得的合作伙伴ID。
* **<font color="#ff6600">`aliKey`</font>** <font color="#0099ff">`(String)`</font> <font color="#bbbbbb">`''`</font> :
在支付宝商家平台所获得的产品使用秘钥。
* **<font color="#ff6600">`aliNotifyUrl`</font>** <font color="#0099ff">`(String)`</font> <font color="#bbbbbb">`''`</font> :
指定支付宝支付的异步回调地址。
* **<font color="#ff6600">`aliReturnUrl`</font>** <font color="#0099ff">`(String)`</font> <font color="#bbbbbb">`''`</font> :
指定支付宝支付的跳转页面。
* **<font color="#ff6600">`wxAppid`</font>** <font color="#0099ff">`(String)`</font> <font color="#bbbbbb">`''`</font> :
在微信公众平台所获得的APPID。
* **<font color="#ff6600">`wxMchId`</font>** <font color="#0099ff">`(String)`</font> <font color="#bbbbbb">`''`</font> :
在微信支付平台所获得的商家编号。
* **<font color="#ff6600">`wxKey`</font>** <font color="#0099ff">`(String)`</font> <font color="#bbbbbb">`''`</font> :
在微信支付平台所获得的产品使用秘钥。
* **<font color="#ff6600">`wxNotifyUrl`</font>** <font color="#0099ff">`(String)`</font> <font color="#bbbbbb">`''`</font> :
指定微信支付的异步回调地址。
* **<font color="#ff6600">`wxSceneInfo`</font>** <font color="#0099ff">`(Array)`</font> <font color="#bbbbbb">`...`</font> :
指定微信支付中H5支付的场景信息,有关此配置项的详细信息,请查阅微信支付提供的 <font color="#c7254e">`开发文档`</font> 。
## 公共参数
* **<font color="#ff6600">`id(编号)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`默认值见方法参数`</font>:
用以指定本次交易在您的应用中的订单号。
>w 详情请查阅第三方支付服务商提供的开发文档。
* **<font color="#ff6600">`title(标题)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`默认值见方法参数`</font>:
用以指定本次交易的名称。
>w 详情请查阅第三方支付服务商提供的开发文档。
* **<font color="#ff6600">`total(金额)`</font>** <font color="#0099ff">`(Int)`</font> <font color="#BBBBBB">`默认值见方法参数`</font>:
用以指定本次交易的金额,单位为人民币 <font color="#c7254e">`分`</font> 。
## :: aliPay()方法
### 语法
**<font color="#0099ff"><font color="#ff6600">Pay</font> :: <font color="#ff6600">aliPay</font> ( <kbd>传参数组</kbd> )</font>**
### 说明
通过支付宝支付提供的接口,实现在线支付。
此方法 <font color="#c7254e">`支持`</font> 中文参数名。
### 参数
* **<font color="#ff6600">`id(编号)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`<必须>`</font>:
详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明。
* **<font color="#ff6600">`title(标题)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`<必须>`</font>:
详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明。
* **<font color="#ff6600">`total(金额)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`<必须>`</font>:
详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明。
* **<font color="#ff6600">`qr(二维码)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`FALSE`</font>:
当值为 <font color="#c7254e">`TRUE`</font> 时,您可以将返回的URL以 <font color="#c7254e">`iframe`</font> 框架的形式内嵌于网页中,此URL对应的页面是一个由支付宝支付提供的支付二维码,详情请查阅支付宝支付提供的 <font color="#c7254e">`开发文档`</font> 。
* **<font color="#ff6600">`qr_width(二维码宽度)`</font>** <font color="#0099ff">`(Int)`</font> <font color="#BBBBBB">`NULL`</font>:
用以指定支付二维码的大小。
值的单位为 <font color="#c7254e">`像素`</font>(px),详情请查阅支付宝支付提供的 <font color="#c7254e">`开发文档`</font> 。
### 返回
<font color="#0099ff">`(String)`</font> 类型。
返回的字符串是一个URL。如果参数 <font color="#c7254e">`qr`</font> 的值为 <font color="#c7254e">`FALSE`</font> 时,可以将页面跳转至该URL,让用户开始支付操作。
## :: wxPay()方法
### 语法
**<font color="#0099ff"><font color="#ff6600">Pay</font> :: <font color="#ff6600">wxPay</font> ( <kbd>传参数组</kbd> )</font>**
### 说明
通过微信支付提供的接口,实现在线支付。
此方法 <font color="#c7254e">`支持`</font> 中文参数名。
### 参数
* **<font color="#ff6600">`id(编号)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`<必须>`</font>:
详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明。
* **<font color="#ff6600">`title(标题)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`<必须>`</font>:
详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明。
* **<font color="#ff6600">`total(金额)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`<必须>`</font>:
详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明。
* **<font color="#ff6600">`mode(模式)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`'NATIVE'`</font>:
用以指定支付模式。
当值为 <font color="#c7254e">`NATIVE`</font> 时,场景为扫码支付;当值为 <font color="#c7254e">`JSAPI`</font> 时,场景为微信内网页支付,前端通过JSAPI唤起客户端的支付界面;当值为 <font color="#c7254e">`MWEB`</font> 时,场景为H5支付。
详情请查阅微信支付提供的 <font color="#c7254e">`开发文档`</font> 。
* **<font color="#ff6600">`ip(ip地址)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`NULL`</font>:
用以指定支付者的IP地址。
当值为 <font color="#c7254e">`NULL`</font> 时,模块将使用 <font color="#c7254e">`$_SERVER['REMOTE_ADDR']`</font> 获取IP地址。
详情请查阅微信支付提供的 <font color="#c7254e">`开发文档`</font> 。
* **<font color="#ff6600">`openid(openid)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`NULL`</font>:
用以指定支付者的OpenID。
当参数 <font color="#c7254e">`mode`</font> 的值为 <font color="#c7254e">`JSAPI`</font> 时,您必须传入此参数。
详情请查阅微信支付提供的 <font color="#c7254e">`开发文档`</font> 。
### 返回
<font color="#0099ff">`(String)`</font> 类型。
当参数Mode的值为 <font color="#c7254e">`NATIVE`</font> 时,您需要将返回的字符串生成二维码展示给用户。
当参数Mode的值为 <font color="#c7254e">`MWEB`</font> 时,返回的字符串是一个URL。可以将页面跳转至该URL,让用户开始支付操作。
当参数Mode的值为 <font color="#c7254e">`JSAPI`</font> 时,返回的字符串是微信支付规定的 <font color="#c7254e">`PREPAY_ID`</font> 数据。可以通过前端JSAPI进一步操作后,让用户开始支付操作。
## :: aliPayVerify()方法
### 语法
**<font color="#0099ff"><font color="#ff6600">Pay</font> :: <font color="#ff6600">aliPayVerify</font> ( )</font>**
### 说明
对收到的回调请求按照支付宝支付的验签规则验签。
### 参数
无。
### 返回
<font color="#0099ff">`(Bool)`</font> 类型。
返回值为 <font color="#c7254e">`TRUE`</font> 时代表验签成功、<font color="#c7254e">`FALSE`</font> 代表验签失败。
## :: wxPayVerify()方法
### 语法
**<font color="#0099ff"><font color="#ff6600">Pay</font> :: <font color="#ff6600">wxPayVerify</font> ( <kbd>传参数组</kbd> )</font>**
### 说明
对收到的回调请求按照微信支付的验签规则验签。
此方法 <font color="#c7254e">`支持`</font> 中文参数名。
### 参数
* **<font color="#ff6600">`string(字符串)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`<必须>`</font>:
用以指定验签时使用的Xml,通常通过 <font color="#c7254e">`php://input`</font> 获得。
详情请查阅微信支付提供的 <font color="#c7254e">`开发文档`</font> 。
### 返回
<font color="#0099ff">`(Array | Bool)`</font> 类型。
当返回值为一个非空数组时,表示验签成功,此数组由传入的Xml解析得来。
当返回值为 <font color="#c7254e">`FALSE`</font> 时,表示验签失败。