GET
GET = 'get'
Class API.
$http : \EasyWeChat\Core\Http
Http instance.
$accessToken : \EasyWeChat\Core\AccessToken
The request token.
$merchant : \EasyWeChat\Payment\Merchant
Merchant instance.
__construct(\EasyWeChat\Payment\Merchant $merchant)
API constructor.
\EasyWeChat\Payment\Merchant | $merchant |
getHttp() : \EasyWeChat\Core\Http
Return the http instance.
setHttp(\EasyWeChat\Core\Http $http) : $this
Set the http instance.
\EasyWeChat\Core\Http | $http |
getAccessToken() : \EasyWeChat\Core\AccessToken
Return the current accessToken.
setAccessToken(\EasyWeChat\Core\AccessToken $accessToken) : $this
Set the request token.
\EasyWeChat\Core\AccessToken | $accessToken |
parseJSON(string $method, array $args) : \EasyWeChat\Support\Collection
Parse JSON from response and check error.
string | $method | |
array | $args |
| null
prepare(array $params) : \EasyWeChat\Support\Collection
Prepare luckymoney.
array | $params |
query(string $mchBillNo) : \EasyWeChat\Support\Collection
Query luckymoney.
string | $mchBillNo |
send(array $params, string $type = self::TYPE_NORMAL) : \EasyWeChat\Support\Collection
Send LuckyMoney.
array | $params | |
string | $type |
sendNormal(array $params) : \EasyWeChat\Support\Collection
Send normal LuckyMoney.
array | $params |
sendGroup(array $params) : \EasyWeChat\Support\Collection
Send group luckymoney.
array | $params |
setMerchant(\EasyWeChat\Payment\Merchant $merchant) : $this
Merchant setter.
\EasyWeChat\Payment\Merchant | $merchant |
getMerchant() : \EasyWeChat\Payment\Merchant
Merchant getter.
request(string $api, array $params, string $method = 'post') : \EasyWeChat\Support\Collection
Make a API request.
string | $api | |
array | $params | |
string | $method |
parseResponse(\Psr\Http\Message\ResponseInterface|string $response) : \EasyWeChat\Support\Collection
Parse Response XML to array.
\Psr\Http\Message\ResponseInterface|string | $response |
<?php
/*
* This file is part of the overtrue/wechat.
*
* (c) overtrue <i@overtrue.me>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
/**
* API.php.
*
* @author tianyong90 <412039588@qq.com>
* @copyright 2015 overtrue <i@overtrue.me>
*
* @see https://github.com/overtrue
* @see http://overtrue.me
*/
namespace EasyWeChat\Payment\LuckyMoney;
use EasyWeChat\Core\AbstractAPI;
use EasyWeChat\Payment\Merchant;
use EasyWeChat\Support\Collection;
use EasyWeChat\Support\XML;
use Psr\Http\Message\ResponseInterface;
/**
* Class API.
*/
class API extends AbstractAPI
{
/**
* Merchant instance.
*
* @var Merchant
*/
protected $merchant;
// api
const API_SEND = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';
const API_SEND_GROUP = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack';
const API_QUERY = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo';
const API_PREPARE = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/hbpreorder';
// LuckyMoney type
const TYPE_NORMAL = 'NORMAL';
const TYPE_GROUP = 'GROUP';
// Risk control type.
const RISK_NORMAL = 'NORMAL';
const RISK_IGN_FREQ_LMT = 'IGN_FREQ_LMT';
const RISK_IGN_DAY_LMT = 'IGN_DAY_LMT';
const RISK_IGN_FREQ_DAY_LMT = 'IGN_FREQ_DAY_LMT';
/**
* API constructor.
*
* @param \EasyWeChat\Payment\Merchant $merchant
*/
public function __construct(Merchant $merchant)
{
$this->merchant = $merchant;
}
/**
* Prepare luckymoney.
*
* @param array $params
*
* @return \EasyWeChat\Support\Collection
*/
public function prepare(array $params)
{
$params['wxappid'] = $this->merchant->app_id;
// XXX: PLEASE DON'T CHANGE THE FOLLOWING LINES.
$params['auth_mchid'] = '1000052601';
$params['auth_appid'] = 'wxbf42bd79c4391863';
$params['amt_type'] = 'ALL_RAND';
return $this->request(self::API_PREPARE, $params);
}
/**
* Query luckymoney.
*
* @param string $mchBillNo
*
* @return \EasyWeChat\Support\Collection
*/
public function query($mchBillNo)
{
$params = [
'appid' => $this->merchant->app_id,
'mch_billno' => $mchBillNo,
'bill_type' => 'MCHT',
];
return $this->request(self::API_QUERY, $params);
}
/**
* Send LuckyMoney.
*
* @param array $params
* @param string $type
*
* @return \EasyWeChat\Support\Collection
*/
public function send(array $params, $type = self::TYPE_NORMAL)
{
$api = (self::TYPE_NORMAL === $type) ? self::API_SEND : self::API_SEND_GROUP;
$params['wxappid'] = $this->merchant->app_id;
//如果类型为分裂红则去掉client_ip参数,否则签名会出错
if (self::TYPE_GROUP === $type) {
unset($params['client_ip']);
}
return $this->request($api, $params);
}
/**
* Send normal LuckyMoney.
*
* @param array $params
*
* @return \EasyWeChat\Support\Collection
*/
public function sendNormal($params)
{
$params['total_num'] = 1;
$params['client_ip'] = !empty($params['client_ip']) ? $params['client_ip'] : getenv('SERVER_ADDR');
return $this->send($params, self::TYPE_NORMAL);
}
/**
* Send group luckymoney.
*
* @param array $params
*
* @return \EasyWeChat\Support\Collection
*/
public function sendGroup($params)
{
$params['amt_type'] = 'ALL_RAND';
return $this->send($params, self::TYPE_GROUP);
}
/**
* Merchant setter.
*
* @param Merchant $merchant
*
* @return $this
*/
public function setMerchant(Merchant $merchant)
{
$this->merchant = $merchant;
}
/**
* Merchant getter.
*
* @return Merchant
*/
public function getMerchant()
{
return $this->merchant;
}
/**
* Make a API request.
*
* @param string $api
* @param array $params
* @param string $method
*
* @return \EasyWeChat\Support\Collection
*/
protected function request($api, array $params, $method = 'post')
{
$params = array_filter($params);
$params['mch_id'] = $this->merchant->merchant_id;
$params['nonce_str'] = uniqid();
$params['sign'] = \EasyWeChat\Payment\generate_sign($params, $this->merchant->key, 'md5');
$options = [
'body' => XML::build($params),
'cert' => $this->merchant->get('cert_path'),
'ssl_key' => $this->merchant->get('key_path'),
];
return $this->parseResponse($this->getHttp()->request($api, $method, $options));
}
/**
* Parse Response XML to array.
*
* @param \Psr\Http\Message\ResponseInterface|string $response
*
* @return \EasyWeChat\Support\Collection
*/
protected function parseResponse($response)
{
if ($response instanceof ResponseInterface) {
$response = $response->getBody();
}
return new Collection((array) XML::parse($response));
}
}