diff --git a/README.md b/README.md index acc4240..95554a1 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ - 方法使用更优雅,不必再去研究那些奇怪的的方法名或者类名是做啥用的 ## 运行环境 -- PHP 7.0+ +- PHP 5.6+ - composer ## 支持的支付网关 @@ -136,20 +136,13 @@ return $pay->dirver('alipay')->gateway('web')->pay($config_biz); ## 返回值 -##### pay (支付接口) -返回 跳转到支付宝进行支付的 Html 代码。在正式项目中,直接 return 即可。 +详情请看「支付网关配置说明与返回值」一节。 -##### refund (退款接口) -true/false +## 错误 -##### close (关闭订单接口) -true/false +使用非跳转接口(如, `refund` 接口,`close` 接口)时,如果在调用相关支付网关 API 时有错误产生,会抛出 `GatewayException` 错误,可以通过 `$e->getMessage()` 查看,同时,也可通过 `$e->raw` 查看调用 API 后返回的原始数据,该值为数组格式。 -## 错误详情 - -使用非跳转接口(如, `refund` 接口,`close` 接口)时,如果有错误产生,会抛出 `GatewayException` 错误。 - -## 各个支付网关配置说明 +## 支付网关配置说明与返回值 由于支付网关不同,每家参数参差不齐,为了方便,我们抽象定义了两个参数:`$config`,`$config_biz`,分别为全局参数,业务参数。但是,所有配置参数均为官方标准参数,无任何差别。 @@ -240,6 +233,19 @@ $config_biz = [ ]; ``` +#### 返回值 +- pay() +类型:string +说明:该接口返回跳转到支付宝支付的 Html 代码。 + +- refund() +类型:bool +说明:退款成功,返回 true; + +- close() +类型:bool +说明:关闭成功,返回 true; + ### 2、支付宝 - 手机网站支付 #### 最小配置参数 @@ -262,6 +268,19 @@ $config_biz = [ 该网关大部分参数和 「电脑支付」 相同,具体请参考 [官方文档](https://docs.open.alipay.com/203/107090/ '支付宝手机网站支付文档') +#### 返回值 +- pay() +类型:string +说明:该接口返回跳转到支付宝支付的 Html 代码。 + +- refund() +类型:bool +说明:退款成功,返回 true; + +- close() +类型:bool +说明:关闭成功,返回 true; + ### 3、支付宝 - APP 支付 #### 最小配置参数 @@ -284,6 +303,19 @@ $config_biz = [ #### 所有配置参数 该网关大部分参数和 「电脑支付」 相同,具体请参考 [官方文档](https://docs.open.alipay.com/204/105465/ '支付宝APP支付文档') +#### 返回值 +- pay() +类型:string +说明:该接口返回用于客户端调用的 orderString 字符串,可直接供 APP 客户端调用,客户端调用方法不在此文档讨论范围内,[Android 用户请看这里](https://docs.open.alipay.com/204/105300/),[Ios 用户请看这里](https://docs.open.alipay.com/204/105299/)。 + +- refund() +类型:bool +说明:退款成功,返回 true; + +- close() +类型:bool +说明:关闭成功,返回 true; + ### 4、微信 - 公众号支付 #### 最小配置参数 @@ -359,8 +391,89 @@ $config_biz = [ ]; ``` +#### 返回值 +- pay() +类型:array +说明:返回用于 微信内H5调起支付 的所需参数数组。后续调用不在本文档讨论范围内,具体请 [参考这里](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6)。 + +后续调用举例: + +```html + +``` + +- refund() +TODO + +- close() +TODO + ### 5、微信 - 小程序支付 -由于「小程序支付」和「公众号支付」都使用的是 JSAPI,所以,该网关大部分参数和 「公众号支付」 相同。 + +#### 最小配置参数 +```php +$config = [ + 'wechat' => [ + 'miniapp_id' => '', // 小程序APPID + 'mch_id' => '', // 微信商户号 + 'notify_url' => '', + 'key' => '', // 微信支付签名秘钥 + ], +]; + +$config_biz = [ + 'out_trade_no' => '', // 订单号 + 'total_fee' => '', // 订单金额,单位:元 + 'body' => '', // 订单描述 + 'spbill_create_ip' => '', // 支付人的 IP + 'openid' => '', // 支付人的 openID +]; +``` + +#### 所有配置参数 +由于「小程序支付」和「公众号支付」都使用的是 JSAPI,所以,除了 APPID 一个使用的是公众号的 APPID 一个使用的是 小程序的 APPID 以外,该网关所有参数和 「公众号支付」 相同,具体请 [参考这里](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1)。 + +#### 返回值 +- pay() +类型:array +说明:返回用于 小程序调起支付API 的所需参数数组。后续调用不在本文档讨论范围内,具体请 [参考这里](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=3)。 + +- refund() +TODO + +- close() +TODO ### 6、微信 - H5 支付 TODO diff --git a/composer.json b/composer.json index d26e91c..ef33eb4 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,7 @@ } ], "require": { - "php": ">=7.0", + "php": ">=5.6", "guzzlehttp/guzzle": "^6.3" }, "autoload": { diff --git a/src/Gateways/Alipay/Alipay.php b/src/Gateways/Alipay/Alipay.php index 03a8593..7d7c6ba 100644 --- a/src/Gateways/Alipay/Alipay.php +++ b/src/Gateways/Alipay/Alipay.php @@ -148,7 +148,7 @@ abstract class Alipay implements GatewayInterface throw new InvalidArgumentException("Missing Config -- [ali_public_key]"); } - $sign = $sign ?? $data['sign']; + $sign = is_null($sign) ? $data['sign'] : $sign; $res = "-----BEGIN PUBLIC KEY-----\n" . wordwrap($this->user_config->get('ali_public_key'), 64, "\n", true) . diff --git a/src/Gateways/Wechat/MiniappGateway.php b/src/Gateways/Wechat/MiniappGateway.php index dc1f87b..f24557b 100644 --- a/src/Gateways/Wechat/MiniappGateway.php +++ b/src/Gateways/Wechat/MiniappGateway.php @@ -35,14 +35,16 @@ class MiniappGateway extends Wechat public function pay(array $config_biz = []) { $this->config = array_merge($this->config, $config_biz); + $this->config['appid'] = $this->user_config->get('miniapp_id'); + $this->config['total_fee'] = intval($this->config['total_fee'] * 100); + $this->config['sign'] = $this->getSign($this->config); $payRequest = [ - "appId" => $this->user_config->get('app_id'), + "appId" => $this->user_config->get('miniapp_id'), "timeStamp" => time(), "nonceStr" => $this->createNonceStr(), "package" => "prepay_id=" . $this->preOrder()['prepay_id'], - "signType" => "MD5", - //"paySign" : "70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 + "signType" => "MD5", ]; $payRequest['paySign'] = $this->getSign($payRequest); diff --git a/src/Gateways/Wechat/Wechat.php b/src/Gateways/Wechat/Wechat.php index 4db1c19..9ab07f8 100644 --- a/src/Gateways/Wechat/Wechat.php +++ b/src/Gateways/Wechat/Wechat.php @@ -117,7 +117,7 @@ abstract class Wechat implements GatewayInterface { $data = $this->fromXml($data); - $sign = $sign ?? $data['sign']; + $sign = is_null($sign) ? $data['sign'] : $sign; return $this->getSign($data) === $sign; }