| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- <?php
- /**
- * Created by PhpStorm.
- * Name: 芸众商城系统
- * Author: 广州市芸众信息科技有限公司
- * Profile: 广州市芸众信息科技有限公司位于国际商贸中心的广州,专注于移动电子商务生态系统打造,拥有芸众社交电商系统、区块链数字资产管理系统、供应链管理系统、电子合同等产品/服务。官网 :www.yunzmall.com www.yunzshop.com
- * Date: 2022/12/1
- * Time: 14:13
- */
- namespace app\payment\controllers;
- use app\common\helpers\Url;
- use app\common\models\PayOrder;
- use app\common\models\PayType;
- use app\payment\PaymentController;
- use Yunshop\Jinepay\models\NotifyLog;
- use Yunshop\Jinepay\models\XmlToArray;
- use Yunshop\Jinepay\services\JinePay;
- class JinepayController extends PaymentController
- {
- const PAY_ID = 104;
- public function notifyUrl()
- {
- $strData = request()->getContent();
- \Log::debug(self::class . '--: 锦银E付回调通知: ' . $strData);
- $strData = explode('&', $strData);
- // 遍历data 把值用 = 号切割转成一维关联数组
- $data = [];
- foreach ($strData as $value) {
- $explode = explode('=', $value);
- $data[$explode[0]] = $explode[1];
- }
- $payOrder = PayOrder::where('out_order_no', $data['out_trade_no'])->first();
- if (!$payOrder) {
- \Log::debug(self::class . '--: 未找到支付订单');
- echo 'fail';
- return;
- }
- \YunShop::app()->uniacid = $payOrder->uniacid;
- \Setting::$uniqueAccountId = $payOrder->uniacid;
- $jinePay = new JinePay;
- try {
- $res = $jinePay->verifySign($data);
- } catch (\Exception $e) {
- \Log::debug(self::class . '--验签失败 失败原因: ' . $e->getMessage());
- $res = false;
- }
- if (!$res) {
- // 出发自主查询
- $jinePay->setReqData([
- 'service' => 'query_order_service',
- 'out_trade_no' => $data['out_trade_no'],
- 'partner' => $jinePay->set['merchant'],
- ]);
- $queryData = XmlToArray::convert($jinePay->queryOrder());
- $verify = $jinePay->verifySign($queryData);
- // 自主查询付款成功后
- if ($queryData['trade_state'] === '0' && $verify) {
- $res = true;
- }
- }
- if (!$res) {
- \Log::debug(self::class . '--: 验签失败');
- echo 'fail';
- return;
- }
- if ($data['trade_state'] === '0') {
- NotifyLog::create([
- 'uniacid' => $payOrder->uniacid,
- 'out_trade_no' => $data['out_trade_no'],
- 'params' => json_encode($data, 320),
- ]);
- $currentPayType = $this->currentPayType(self::PAY_ID);
- $payResultData = $this->setData($data['out_trade_no'], $data['out_trade_no'], ($data['total_fee'] * 100), $currentPayType['id'], $currentPayType['name']);
- $this->payResutl($payResultData);
- \Log::debug(self::class . '订单支付成功--订单号: ' . $data['out_trade_no']);
- echo 'success';
- exit;
- } else {
- \Log::debug(self::class . '订单支付失败--订单号: ' . json_encode($data, 320));
- echo 'fail';
- exit;
- }
- }
- public function returnUrl()
- {
- $request = request()->all();
- $order_info = unserialize(base64_decode($request['afford']));
- \YunShop::app()->uniacid = $order_info['i'];
- \Setting::$uniqueAccountId = $order_info['i'];
- $currentPayType = $this->currentPayType(self::PAY_ID);
- $payOrder = PayOrder::getPayOrderInfo($order_info['order_no'])->first();
- $jinePay = new JinePay;
- $jinePay->setReqData([
- 'service' => 'query_order_service',
- 'out_trade_no' => $order_info['order_no'],
- 'partner' => $jinePay->set['merchant'],
- ]);
- $res = $jinePay->queryOrder();
- \Log::debug(self::class . '-锦银E付同步通知-: ' . $res);
- $data = XmlToArray::convert($res);
- $verify = $jinePay->verifySign($data);
- if ($payOrder && $data['trade_state'] === '0' && $verify) {
- $data = $this->setData($order_info['out_trade_no'], $order_info['out_trade_no'], ($request['total_fee'] * 100), $currentPayType['id'], $currentPayType['name']);
- $this->payResutl($data);
- \Log::debug(self::class . '订单支付成功--订单号: ' . $order_info['order_no']);
- redirect(Url::absoluteApp('member/payYes', ['i' => $order_info['i']]))->send();
- }
- if (!$payOrder) {
- \Log::debug(self::class . '订单支付失败--订单号: ' . $order_info['order_no']);
- \Log::debug(self::class . '订单支付失败原因: ' . json_encode($data, 320));
- redirect(Url::absoluteApp('member/payErr', ['i' => $order_info['i']]))->send();
- }
- }
- /**
- * 支付回调参数
- *
- * @param $order_no
- * @param $parameter
- * @return array
- */
- public function setData($order_no, $trade_no, $total_fee, $pay_type_id, $pay_type)
- {
- return [
- 'total_fee' => $total_fee,
- 'out_trade_no' => $order_no,
- 'trade_no' => $trade_no,
- 'unit' => 'fen',
- 'pay_type' => $pay_type,
- 'pay_type_id' => $pay_type_id,
- ];
- }
- public function currentPayType($payId)
- {
- return PayType::find($payId);
- }
- }
|