123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344 |
- <?php
- // +----------------------------------------------------------------------
- // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
- // +----------------------------------------------------------------------
- // | Author: CRMEB Team <admin@crmeb.com>
- // +----------------------------------------------------------------------
- namespace crmeb\services\pay\extend\allinpay;
- /**
- *
- * Class AllinPay
- * @author 等风来
- * @email 136327134@qq.com
- * @date 2022/12/27
- * @package crmeb\services\pay\extend\allinpay
- */
- class AllinPay extends Client
- {
- //统一支付接口
- const UNITODER_PAY_API = 'unitorder/pay';
- //统一扫码接口
- const UNITORDER_SCANQRPAY = 'unitorder/scanqrpay';
- //退款
- const UNITODER_TRANX_REFUND = 'tranx/refund';
- //订单查询
- const UNITODER_TRANX_QUERY = 'tranx/query';
- const UNITODER_QPAY_AGREEAPPLY = 'qpay/agreeapply';
- //微信公众号内支付请求地址
- const UNITODER_H5UNIONPAY = 'https://vsp.allinpay.com/apiweb/h5unionpay/unionorder';
- /**
- * @var string
- */
- protected $api = '';
- /**
- * 支付类型
- * @var string
- */
- protected $payType = '';
- /**
- * @var string
- */
- protected $version = '';
- /**
- * @var string
- */
- protected $orderKey = 'reqsn';
- /**
- * @var int
- */
- protected $validtime = 720;
- /**
- * 创建支付订单
- * @param string $trxamt
- * @param string $orderId
- * @param string $body
- * @param string|null $openId
- * @param string|null $appid
- * @param string $frontUrl
- * @param string $remark
- * @return mixed
- */
- public function create(string $trxamt, string $orderId, string $body, string $returl = null, string $openId = null, string $appid = null, string $frontUrl = '', string $remark = '')
- {
- $totalFee = (int)bcmul($trxamt, '100');
- $data = [
- 'trxamt' => $totalFee,
- $this->orderKey => $orderId,
- 'validtime' => $this->validtime,
- 'notify_url' => $this->notifyUrl
- ];
- if ($body) {
- $data['body'] = $body;
- }
- if ($remark) {
- $data['remark'] = $remark;
- }
- if ($this->payType) {
- $data['paytype'] = $this->payType;
- }
- if ($returl) {
- $data['returl'] = $returl;
- }
- if ($openId) {
- $data['acct'] = $openId;
- }
- if ($appid) {
- $data['sub_appid'] = $appid;
- }
- if ($frontUrl) {
- $data['front_url'] = $frontUrl;
- }
- if ($this->version) {
- $data['version'] = $this->version;
- }
- $form = !$this->api;
- $api = $this->api;
- $this->version = '';
- $this->payType = '';
- $this->api = '';
- $this->orderKey = 'reqsn';
- $this->validtime = 720;
- return $this->send($api, ['data' => $data, 'form' => $form]);
- }
- /**
- * 微信H5支付
- * @param string $trxamt
- * @param string $orderId
- * @param string $body
- * @param string $returl
- * @param string $remark
- * @return mixed
- */
- public function h5Pay(string $trxamt, string $orderId, string $body, string $returl, string $remark = '')
- {
- $this->version = self::VERSION_NUM_12;
- return $this->create($trxamt, $orderId, $body, $returl, null, null, '', $remark);
- }
- /**
- * 微信js支付
- * @param string $trxamt
- * @param string $orderId
- * @param string $body
- * @param string $openId
- * @param string $appId
- * @param string $frontUrl
- * @param string $remark
- * @return mixed
- */
- public function wechatPay(string $trxamt, string $orderId, string $body, string $openId, string $appId, string $frontUrl, string $remark = '')
- {
- $this->api = self::UNITODER_PAY_API;
- return $this->create($trxamt, $orderId, $body, null, $openId, $appId, $frontUrl, $remark);
- }
- /**
- * app支付 微信和支付宝
- * @param string $trxamt
- * @param string $orderId
- * @param string $body
- * @param bool $isWechat
- * @param string $remark
- * @return mixed
- * @author 等风来
- * @email 136327134@qq.com
- * @date 2023/1/14
- */
- public function appPay(string $trxamt, string $orderId, string $body, string $appid, string $openid = null, bool $isWechat = true, string $remark = '')
- {
- $this->api = self::UNITODER_PAY_API;
- $this->payType = $isWechat ? 'A02' : 'A01';
- $this->version = self::VERSION_NUM_11;
- return $this->create($trxamt, $orderId, $body, null, $openid, $appid, '', $remark);
- }
- /**
- * PC 收银台支付
- * @param string $trxamt
- * @param string $orderId
- * @param string $body
- * @return mixed
- * @author 等风来
- * @email 136327134@qq.com
- * @date 2023/1/15
- */
- public function pcPay(string $trxamt, string $orderId, string $body, string $remark, bool $isWechat = true)
- {
- $this->api = self::UNITODER_PAY_API;
- $this->payType = $isWechat ? 'W01' : 'A01';
- $this->version = self::VERSION_NUM_11;
- $res = $this->create($trxamt, $orderId, $body, null, null, null, '', $remark);
- $invalid = time() + 60;
- if ($isWechat) {
- $key = 'code_url';
- } else {
- $key = 'qrCode';
- }
- return ['invalid' => $invalid, 'logo' => sys_config('wap_login_logo'), $key => $res['payinfo']];
- }
- /**
- * @param string $trxamt
- * @param string $orderId
- * @param string $body
- * @param string $returl
- * @param string $remark
- * @return array
- * @author 等风来
- * @email 136327134@qq.com
- * @date 2023/1/15
- */
- public function miniproPay(string $trxamt, string $orderId, string $body, string $remark = '')
- {
- $totalFee = bcmul($trxamt, '100');
- $data = [
- 'paytype' => 'W06',
- 'trxamt' => $totalFee,
- 'reqsn' => $orderId,
- 'notify_url' => $this->notifyUrl,
- 'body' => $body,
- 'validtime' => (string)$this->validtime,
- 'cusid' => $this->cusid,
- 'appid' => $this->appid,
- 'signtype' => $this->signType,
- 'randomstr' => uniqid(),
- 'remark' => $remark,
- 'version' => self::VERSION_NUM_12
- ];
- $data['sign'] = $this->sign($data);
- return $data;
- }
- public function agreeapply()
- {
- $data = [
- 'meruserid' => 'eesssxxx',
- 'accttype' => '00',
- 'acctno' => '',
- 'idtype' => 0,
- 'idno' => '',
- 'acctname' => '',
- 'mobile' => '',
- 'cvv2' => '',
- 'reqip' => request()->ip(),
- 'reqtime' => date('Y-m-d H:i:s'),
- 'version' => self::VERSION_NUM_11,
- ];
- $data['cusid'] = $this->cusid;
- $data['appid'] = $this->appid;
- $data['signtype'] = $this->signType;
- $data['randomstr'] = uniqid();
- $data['sign'] = $this->sign($data);
- return $this->request(self::UNITODER_QPAY_AGREEAPPLY, $data);
- }
- /**
- * 查询订单
- * @param string $reqsn
- * @return array|mixed
- * @author 等风来
- * @email 136327134@qq.com
- * @date 2023/1/15
- */
- public function query(string $reqsn)
- {
- $data = [
- 'reqsn' => $reqsn
- ];
- return $this->send(self::UNITODER_TRANX_QUERY, ['data' => $data]);
- }
- /**
- * 发起退款
- * @param string $trxamt
- * @param string $reqsn
- * @return array|mixed
- * @author 等风来
- * @email 136327134@qq.com
- * @date 2023/1/15
- */
- public function refund(string $trxamt, string $orderId, string $reqsn)
- {
- $totalFee = (int)bcmul($trxamt, '100');
- $data = [
- 'trxamt' => $totalFee,
- 'reqsn' => $orderId,
- 'oldtrxid' => $reqsn,
- ];
- return $this->send(self::UNITODER_TRANX_REFUND, ['data' => $data]);
- }
- /**
- * 异步回调
- * @param callable $callback
- * @return string
- * @author 等风来
- * @email 136327134@qq.com
- * @date 2023/1/15
- */
- public function handleNotify(callable $callback)
- {
- $params = [];
- foreach (request()->post() as $key => $val) {
- $params[$key] = $val;
- }
- $this->debugLog('通联支付回调数据' . json_encode($params));
- if (count($params) < 1) {
- //如果参数为空,则不进行处理
- return "error";
- }
- $res = $this->validSign($params);
- $this->debugLog('通联支付回调验证:' . json_encode(['res' => $res]));
- if ($res && isset($params['trxstatus']) && $params['trxstatus'] === '0000') {
- //验签成功
- return $callback($params) ? 'success' : 'error';
- } else {
- return "error";
- }
- }
- }
|