From 77f671b68b0285a6af77dc7c5afa36eabcae35aa Mon Sep 17 00:00:00 2001 From: dayu Date: Mon, 4 May 2020 11:07:17 +0800 Subject: [PATCH] feat(wechat): use app pay while gen the app need data in sdk. --- src/Gateways/Wechat/AppCharge.php | 36 ++++++++++++++++++++++++++++++- src/Supports/BaseObject.php | 2 +- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/Gateways/Wechat/AppCharge.php b/src/Gateways/Wechat/AppCharge.php index da80d516..66e72172 100644 --- a/src/Gateways/Wechat/AppCharge.php +++ b/src/Gateways/Wechat/AppCharge.php @@ -13,6 +13,8 @@ use Payment\Contracts\IGatewayRequest; use Payment\Exceptions\GatewayException; +use Payment\Helpers\ArrayUtil; +use Payment\Helpers\StrUtil; use Payment\Payment; /** @@ -36,10 +38,42 @@ class AppCharge extends WechatBaseObject implements IGatewayRequest public function request(array $requestParams) { try { - return $this->requestWXApi(self::METHOD, $requestParams); + $ret = $this->requestWXApi(self::METHOD, $requestParams); } catch (GatewayException $e) { throw $e; } + + // 生成app端需要的数据 + if (is_array($ret) && $ret['return_code'] === 'SUCCESS' && $ret['result_code'] === 'SUCCESS') { + $payData = [ + 'appid' => $ret['appid'], + 'partnerid' => $ret['mch_id'], + 'prepayid' => $ret['prepay_id'], + 'package' => 'Sign=WXPay', // 微信要求固定值 + 'noncestr' => StrUtil::getNonceStr(self::NONCE_LEN), + 'timestamp' => time(), + ]; + + // 添加签名 + $payData = ArrayUtil::paraFilter($payData); + $payData = ArrayUtil::arraySort($payData); + + try { + $signStr = ArrayUtil::createLinkstring($payData); + $payData['sign'] = $this->makeSign($signStr); + } catch (\Exception $e) { + throw new GatewayException($e->getMessage(), Payment::PARAMS_ERR); + } + + // 这三个字段是为了让前端的判断保持一致 + $payData['return_code'] = 'SUCCESS'; + $payData['return_msg'] = $ret['return_msg']; + $payData['result_code'] = 'SUCCESS'; + + $ret = $payData; + } + + return $ret; } /** diff --git a/src/Supports/BaseObject.php b/src/Supports/BaseObject.php index 8ddf0e86..0413f5f9 100644 --- a/src/Supports/BaseObject.php +++ b/src/Supports/BaseObject.php @@ -22,7 +22,7 @@ */ abstract class BaseObject { - const VERSION = '5.0.3'; + const VERSION = '5.1.0'; /** * @var Config