diff --git a/application/common.php b/application/common.php index 0a9778cdb..2230e6684 100644 --- a/application/common.php +++ b/application/common.php @@ -33,7 +33,7 @@ function p($data, $replace = false, $pathname = NULL) { /** * 获取微信操作对象 * @param string $type - * @return \Wechat\WechatReceive|\Wechat\WechatUser + * @return \Wechat\WechatReceive|\Wechat\WechatUser|\Wechat\WechatPay */ function & load_wechat($type = '') { static $wechat = array(); diff --git a/application/extra/wechat.php b/application/extra/wechat.php index 7790c876a..b8d1b8b37 100644 --- a/application/extra/wechat.php +++ b/application/extra/wechat.php @@ -23,7 +23,7 @@ return [ 'encodingaeskey' => 'eHSmk5yJN2vSsuYscC8aHIiXnrgXZSKA4MRL9csEwTv', 'mch_id' => '1332187001', 'partnerkey' => 'A82DC5BD1F3359081049C568D8502BC5', - 'ssl_cer' => '', - 'ssl_key' => '', + 'ssl_cer' => __DIR__ . '/cert/apiclient_cert.pem', + 'ssl_key' => __DIR__ . '/cert/apiclient_key.pem', 'cachepath' => RUNTIME_PATH . 'wechat/pay', ]; \ No newline at end of file diff --git a/composer.lock b/composer.lock index 7b83ab763..a221d0d61 100644 --- a/composer.lock +++ b/composer.lock @@ -492,12 +492,12 @@ "source": { "type": "git", "url": "https://github.com/zoujingli/wechat-php-sdk.git", - "reference": "e04062d1c1cfb25e56bccb237e59382cfcc8facc" + "reference": "eb8ee1abd932cb2fa150d0d5fdba7056c2195526" }, "dist": { "type": "zip", - "url": "https://files.phpcomposer.com/files/zoujingli/wechat-php-sdk/e04062d1c1cfb25e56bccb237e59382cfcc8facc.zip", - "reference": "e04062d1c1cfb25e56bccb237e59382cfcc8facc", + "url": "https://files.phpcomposer.com/files/zoujingli/wechat-php-sdk/eb8ee1abd932cb2fa150d0d5fdba7056c2195526.zip", + "reference": "eb8ee1abd932cb2fa150d0d5fdba7056c2195526", "shasum": "" }, "require": { @@ -518,7 +518,7 @@ "keywords": [ "wechat-php-sdk" ], - "time": "2017-04-07 03:34:14" + "time": "2017-04-12 11:30:27" } ], "packages-dev": [], diff --git a/vendor/autoload.php b/vendor/autoload.php index 363b685a8..f9d478b34 100644 --- a/vendor/autoload.php +++ b/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit42475d352d15c1c328bfca6e545ab2b5::getLoader(); +return ComposerAutoloaderInite4b30659f938a4e87588699dc50b59ad::getLoader(); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index ba27bd699..d495b91d5 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit42475d352d15c1c328bfca6e545ab2b5 +class ComposerAutoloaderInite4b30659f938a4e87588699dc50b59ad { private static $loader; @@ -19,15 +19,15 @@ class ComposerAutoloaderInit42475d352d15c1c328bfca6e545ab2b5 return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit42475d352d15c1c328bfca6e545ab2b5', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInite4b30659f938a4e87588699dc50b59ad', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInit42475d352d15c1c328bfca6e545ab2b5', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInite4b30659f938a4e87588699dc50b59ad', 'loadClassLoader')); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION'); if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit42475d352d15c1c328bfca6e545ab2b5::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInite4b30659f938a4e87588699dc50b59ad::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -48,19 +48,19 @@ class ComposerAutoloaderInit42475d352d15c1c328bfca6e545ab2b5 $loader->register(true); if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInit42475d352d15c1c328bfca6e545ab2b5::$files; + $includeFiles = Composer\Autoload\ComposerStaticInite4b30659f938a4e87588699dc50b59ad::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire42475d352d15c1c328bfca6e545ab2b5($fileIdentifier, $file); + composerRequiree4b30659f938a4e87588699dc50b59ad($fileIdentifier, $file); } return $loader; } } -function composerRequire42475d352d15c1c328bfca6e545ab2b5($fileIdentifier, $file) +function composerRequiree4b30659f938a4e87588699dc50b59ad($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index aabbfca51..225970c25 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit42475d352d15c1c328bfca6e545ab2b5 +class ComposerStaticInite4b30659f938a4e87588699dc50b59ad { public static $files = array ( '9b552a3cc426e3287cc811caefa3cf53' => __DIR__ . '/..' . '/topthink/think-helper/src/helper.php', @@ -314,9 +314,9 @@ class ComposerStaticInit42475d352d15c1c328bfca6e545ab2b5 public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit42475d352d15c1c328bfca6e545ab2b5::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit42475d352d15c1c328bfca6e545ab2b5::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInit42475d352d15c1c328bfca6e545ab2b5::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInite4b30659f938a4e87588699dc50b59ad::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInite4b30659f938a4e87588699dc50b59ad::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInite4b30659f938a4e87588699dc50b59ad::$classMap; }, null, ClassLoader::class); } diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index a1f80136e..2c92ddd43 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -88,18 +88,18 @@ "source": { "type": "git", "url": "https://github.com/zoujingli/wechat-php-sdk.git", - "reference": "e04062d1c1cfb25e56bccb237e59382cfcc8facc" + "reference": "eb8ee1abd932cb2fa150d0d5fdba7056c2195526" }, "dist": { "type": "zip", - "url": "https://files.phpcomposer.com/files/zoujingli/wechat-php-sdk/e04062d1c1cfb25e56bccb237e59382cfcc8facc.zip", - "reference": "e04062d1c1cfb25e56bccb237e59382cfcc8facc", + "url": "https://files.phpcomposer.com/files/zoujingli/wechat-php-sdk/eb8ee1abd932cb2fa150d0d5fdba7056c2195526.zip", + "reference": "eb8ee1abd932cb2fa150d0d5fdba7056c2195526", "shasum": "" }, "require": { "php": ">=5.3.3" }, - "time": "2017-04-07 03:34:14", + "time": "2017-04-12 11:30:27", "type": "project", "installation-source": "dist", "autoload": { diff --git a/vendor/zoujingli/wechat-php-sdk/Wechat/WechatPay.php b/vendor/zoujingli/wechat-php-sdk/Wechat/WechatPay.php index a8c125a00..56f9b101b 100644 --- a/vendor/zoujingli/wechat-php-sdk/Wechat/WechatPay.php +++ b/vendor/zoujingli/wechat-php-sdk/Wechat/WechatPay.php @@ -284,7 +284,7 @@ class WechatPay { return $result; } - /** + /** * 订单退款接口 * @param string $out_trade_no 商户订单号 * @param string $transaction_id 微信订单号 @@ -350,28 +350,42 @@ class WechatPay { /** * 发送现金红包 * @param string $openid 红包接收者OPENID - * @param int $amount 红包总金额 - * @param string $billno 商户订单号 + * @param int $total_amount 红包总金额 + * @param string $mch_billno 商户订单号 * @param string $sendname 商户名称 * @param string $wishing 红包祝福语 - * @param string $actname 活动名称 + * @param string $act_name 活动名称 * @param string $remark 备注信息 - * @return bool|array + * @param null|int $total_num 红包发放总人数(大于1为裂变红包) + * @param null|string $scene_id 场景id + * @param string $risk_info 活动信息 + * @param null|string $consume_mch_id 资金授权商户号 + * @return array|bool * @link https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_5 */ - public function sendRedPack($openid, $amount, $billno, $sendname, $wishing, $actname, $remark) { + public function sendRedPack($openid, $total_amount, $mch_billno, $sendname, $wishing, $act_name, $remark, $total_num = 1, $scene_id = null, $risk_info = '', $consume_mch_id = null) { $data = array(); - $data['mch_billno'] = $billno; // 商户订单号 mch_id+yyyymmdd+10位一天内不能重复的数字 + $data['mch_billno'] = $mch_billno; // 商户订单号 mch_id+yyyymmdd+10位一天内不能重复的数字 $data['wxappid'] = $this->appid; $data['send_name'] = $sendname; //商户名称 $data['re_openid'] = $openid; //红包接收者 - $data['total_amount'] = $amount; //红包金额 + $data['total_amount'] = $total_amount; //红包总金额 $data['total_num'] = '1'; //发放人数据 $data['wishing'] = $wishing; //红包祝福语 $data['client_ip'] = Tools::getAddress(); //调用接口的机器Ip地址 - $data['act_name'] = $actname; //活动名称 + $data['act_name'] = $act_name; //活动名称 $data['remark'] = $remark; //备注信息 - $result = $this->postXmlSSL($data, self::MCH_BASE_URL . '/mmpaymkttransfers/sendredpack'); + $data['total_num'] = $total_num; + !empty($scene_id) && $data['scene_id'] = $scene_id; + !empty($risk_info) && $data['risk_info'] = $risk_info; + !empty($consume_mch_id) && $data['consume_mch_id'] = $consume_mch_id; + if ($total_num > 1) { + $data['amt_type'] = 'ALL_RAND'; + $api = self::MCH_BASE_URL . '/mmpaymkttransfers/sendgroupredpack'; + } else { + $api = self::MCH_BASE_URL . '/mmpaymkttransfers/sendredpack'; + } + $result = $this->postXmlSSL($data, $api); $json = Tools::xml2arr($result); if (!empty($json) && false === $this->_parseResult($json)) { return false; @@ -379,6 +393,7 @@ class WechatPay { return $json; } + /** * 现金红包状态查询 * @param string $billno