123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- <?php
- // +----------------------------------------------------------------------
- // | WeChatDeveloper
- // +----------------------------------------------------------------------
- // | 版权所有 2014~2023 ThinkAdmin [ thinkadmin.top ]
- // +----------------------------------------------------------------------
- // | 官方网站: https://thinkadmin.top
- // +----------------------------------------------------------------------
- // | 开源协议 ( https://mit-license.org )
- // | 免责声明 ( https://thinkadmin.top/disclaimer )
- // +----------------------------------------------------------------------
- // | gitee 代码仓库:https://gitee.com/zoujingli/WeChatDeveloper
- // | github 代码仓库:https://github.com/zoujingli/WeChatDeveloper
- // +----------------------------------------------------------------------
- namespace WePay;
- use WeChat\Contracts\BasicWePay;
- use WeChat\Contracts\Tools;
- use WeChat\Exceptions\InvalidDecryptException;
- use WeChat\Exceptions\InvalidResponseException;
- /**
- * 微信商户退款
- * Class Refund
- * @package WePay
- */
- class Refund extends BasicWePay
- {
- /**
- * 创建退款订单
- * @param array $options
- * @return array
- * @throws \WeChat\Exceptions\InvalidResponseException
- * @throws \WeChat\Exceptions\LocalCacheException
- */
- public function create(array $options)
- {
- $url = 'https://api.mch.weixin.qq.com/secapi/pay/refund';
- return $this->callPostApi($url, $options, true);
- }
- /**
- * 查询退款
- * @param array $options
- * @return array
- * @throws \WeChat\Exceptions\InvalidResponseException
- * @throws \WeChat\Exceptions\LocalCacheException
- */
- public function query(array $options)
- {
- $url = 'https://api.mch.weixin.qq.com/pay/refundquery';
- return $this->callPostApi($url, $options);
- }
- /**
- * 获取退款通知
- * @param string $xml
- * @return array
- * @throws \WeChat\Exceptions\InvalidDecryptException
- * @throws \WeChat\Exceptions\InvalidResponseException
- */
- public function getNotify($xml = '')
- {
- $data = Tools::xml2arr(empty($xml) ? Tools::getRawInput() : $xml);
- if (!isset($data['return_code']) || $data['return_code'] !== 'SUCCESS') {
- throw new InvalidResponseException('获取退款通知XML失败!');
- }
- try {
- $key = md5($this->config->get('mch_key'));
- $decrypt = base64_decode($data['req_info']);
- $response = openssl_decrypt($decrypt, 'aes-256-ecb', $key, OPENSSL_RAW_DATA);
- $data['result'] = Tools::xml2arr($response);
- return $data;
- } catch (\Exception $exception) {
- throw new InvalidDecryptException($exception->getMessage(), $exception->getCode());
- }
- }
- }
|