| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- <?php
- namespace App\Repositories\Service\Payment;
- use App\Repositories\ConfigRepoistory;
- use App\Repositories\Service\CommonService;
- class MingsenPayment extends PaymentInterface
- {
- /**
- * 查询请求地址
- *
- * @var string
- */
- private $queryUrl = 'http://akmszf.com/Pay_Trade_query.html';
- /**
- * 支付请求地址
- *
- * @var string
- */
- private $payUrl = 'http://akmszf.com/Pay_Index.html';
- /**
- * 公钥
- *
- * @var string
- */
- private $publicKey = 'k66zep0bk8cp8jrl8ts4jib2hru9xa20';
- /**
- * 公钥
- *
- * @var string
- */
- const SUCESS_CODE = '00';
- const STATUS_SUCCESS = 'success';
- /**
- * @var null
- */
- private static $_instance = null;
- /**
- * @return WhiteSharkPayment|null
- */
- public static function getInstance()
- {
- if (is_null(self::$_instance)) {
- self::$_instance = new self();
- }
- return self::$_instance;
- }
- public function createPayLink($data = array())
- {
- $payInfo = [
- 'pay_memberid' => $data['partner_id'], //商户号
- 'pay_orderid' => $data['order_sn'],
- 'pay_applydate' => date('Y-m-d H:i:s'),
- 'pay_bankcode' => $data['pay_attr_code'],
- 'pay_notifyurl' => $data['notify_url'],
- 'pay_callbackurl' => $data['pay_url'],
- 'pay_amount' => sprintf('%.2f', $data['money']),
- ];
- $payInfo['pay_md5sign'] = strtoupper(md5($this->getSign($payInfo) . "key=" . $this->publicKey));
- $payInfo['pay_productname'] = 'SG';
- $sRes = $this->httpPost($this->payUrl, $payInfo);
- $url = '';
- if (strpos($sRes, 'http') !== false) {
- $url = $sRes;
- } else {
- if (empty($sRes)) {
- $this->_lastError = '请求异常';
- payLogger(__CLASS__, '请求异常data='.$sRes, $payInfo);
- return '';
- }
- $aRes = json_decode($sRes, true);
- if (empty($aRes)) {
- $this->_lastError = '请求异常!';
- payLogger(__CLASS__,'请求异常 (解析) data='.$sRes, $payInfo);
- return '';
- }
- if ($aRes['status'] != self::STATUS_SUCCESS) {
- $this->_lastError = '请求异常,请求失败';
- payLogger(__CLASS__,'请求异常,请求失败 data='.$sRes,$payInfo);
- return '';
- }
- }
- if (empty($url)) {
- $this->_lastError = '通道方返回为空';
- payLogger(__CLASS__,'通道方返回为空 data='.$sRes,$payInfo);
- return '';
- }
- return $url;
- }
- public function queryOrder($data, &$orderSn, &$money, $partnerId)
- {
- $queryInfo = [
- 'pay_memberid' => $partnerId,
- 'pay_orderid' => $orderSn
- ];
- $queryInfo['pay_md5sign'] = strtoupper(md5($this->getSign($queryInfo) . "key=" . $this->publicKey));
- $sRes = $this->httpPost($this->queryUrl, $queryInfo);
- if (empty($sRes)) {
- $this->_lastError = '查询请求异常';
- payLogger(__CLASS__,'查询请求异常 $queryInfo='.json_encode($queryInfo),$data);
- return '';
- }
- $aRes = json_decode($sRes, true);
- if (empty($aRes)) {
- $this->_lastError = '查询解析异常';
- payLogger(__CLASS__,'查询解析异常 data='.$sRes,$data);
- return '';
- }
- if ($aRes['returncode'] != self::SUCESS_CODE || $aRes['trade_state'] !== 'SUCCESS') {
- $this->_lastError = '查询订单状态异常';
- payLogger(__CLASS__,'查询订单状态异常 data='.$sRes,$data);
- return '';
- }
- if ($money != $aRes['amount']) {
- $this->_lastError = '查询订单金额异常';
- payLogger(__CLASS__,'查询订单金额异常 data='.$sRes,$data);
- return '';
- }
- return true;
- }
- public function notify(&$orderSn, &$tradeNo, &$money, $partnerId)
- {
- $data = request()->all();
- if ($data['returncode'] != self::SUCESS_CODE) {
- payLogger(__CLASS__, '回调订单状态失败', $data);
- return false;
- }
- $info = [
- 'memberid' => $partnerId,
- 'orderid' => $data['orderid'],
- 'amount' => $data['amount'],
- 'transaction_id' => $data['transaction_id'],
- 'datetime' => $data['datetime'],
- 'returncode' => $data['returncode']
- ];
- $sign = strtoupper(md5($this->getSign($info) . "key=" . $this->publicKey));
- if ($sign != $data['sign']) {
- $this->_lastError = '验证失败!';
- payLogger(__CLASS__, '验证失败 $sign=' . $sign, $data);
- return false;
- }
- $money = $data['amount'];
- $res = $this->queryOrder($data, $data['orderid'], $money, $partnerId);
- if (empty($res)) {
- return '';
- }
- $orderSn = $data['orderid'];
- $tradeNo = $data['transaction_id'];
- return true;
- }
- public function stopNotify()
- {
- return 'OK';
- }
- }
|