| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- <?php
- namespace app\payment\controllers;
- use app\common\models\PayOrder;
- use app\payment\PaymentController;
- use Yunshop\Xfpay\models\PaidRecord;
- use Yunshop\Xfpay\services\Xfpay;
- class XfpayController extends PaymentController
- {
- protected $attach;
- protected $parameter;
- protected $hmac;
- protected $key; //第三方加密回调key
- const SHOP_XFPAY_WECHAT = 78;
- const SHOP_XFPAY_ALIPAY = 79;
- public function __construct()
- {
- parent::__construct();
- // 接收第三方请求参数
- $this->attach = $this->validator('attach');
- $this->parameter = $this->validator('data');
- $this->hmac = $this->validator('hmac');
- $this->key = 'H357SFF768D786EBB07E1B8D9A4DABC'; // 回调key
- \YunShop::app()->uniacid = $this->getUniacid();
- }
- public function notifyUrlAlipay()
- {
- // 验证签名
- if (!$this->verifySign()){
- \Log::debug("-------- 商云客: 检测签名无效 --------");
- exit('fail');
- }
- $order_no = base64_decode($this->attach);
- $parameter = json_decode($this->parameter);
- $data = $this->setData($order_no, $parameter, self::SHOP_XFPAY_ALIPAY);
- \Log::debug('-------- 商云客支付-支付宝: 验证数据正常->更新订单状态 start --------');
- $this->payResutl($data);
- $this->buildPaidRecord($order_no, $parameter, self::SHOP_XFPAY_ALIPAY);
- \Log::debug('-------- 商云客支付-支付宝: 验证数据正常->更新订单状态 end --------');
- echo 'success';
- }
- public function notifyUrlWechat()
- {
- // 验证签名
- if (!$this->verifySign()){
- \Log::debug("-------- 商云客: 检测签名无效 --------");
- exit('fail');
- }
- $order_no = base64_decode($this->attach);
- $parameter = json_decode($this->parameter);
- $data = $this->setData($order_no, $parameter, self::SHOP_XFPAY_WECHAT);
- \Log::debug('-------- 商云客支付-微信支付: 验证数据正常->更新订单状态 start --------');
- $this->payResutl($data);
- $this->buildPaidRecord($order_no, $parameter, self::SHOP_XFPAY_WECHAT);
- \Log::debug('-------- 商云客支付-微信支付: 验证数据正常->更新订单状态 end --------');
- echo 'success';
- }
- protected function validator($param)
- {
- if (is_null($_GET[$param])){
- \Log::debug("-------- 商云客支付失败 未检测到第三方参数: $param--------");
- exit('fail');
- }
- return $_GET[$param];
- }
- protected function verifySign()
- {
- $xfpay = new Xfpay();
- $xfpay->setXfpayKey($this->key);
- $xfpay->setParams('attach', $this->attach);
- $xfpay->setParams('data', $this->parameter);
- $xfpay->getHmacParams();
- $hmac = $xfpay->getParams()['hmac'];
- return $hmac == $this->hmac;
- }
- /**
- * 支付回调操作
- * @param $data
- */
- public function payResutl($data)
- {
- try {
- $this->_payResutl($data);
- return true;
- } catch (\Exception $e) {
- $msg = $e->getMessage();
- \Log::debug('回调失败:',$msg);
- echo $msg;exit();
- }
- }
- /**
- * 支付回调参数
- *
- * @param $order_no
- * @param $parameter
- * @return array
- */
- public function setData($order_no, $parameter, $pay_type_id)
- {
- return [
- 'total_fee' => floatval($parameter->total_fee) * 100,
- 'out_trade_no' => $order_no,
- 'trade_no' => $parameter->trade_no,
- 'unit' => 'fen',
- 'pay_type' => '商云客聚合-微信支付',
- 'pay_type_id' => $pay_type_id,
- ];
- }
- protected function getUniacid(){
- $payOrder = PayOrder::select('uniacid')->where(['out_order_no' => base64_decode($this->attach)])->first();
- if ($payOrder){
- return $payOrder->uniacid;
- }
- \Log::debug('商城订单号未找到: ',base64_decode($this->attach));
- exit('fail');
- }
- protected function buildPaidRecord($order_no, $parameter, $pay_type_id){
- try {
- PaidRecord::create([
- 'uniacid' => \YunShop::app()->uniacid,
- 'order_no' => $order_no,
- 'trade_no' => $parameter->trade_no,
- 'total_fee' => $parameter->total_fee,
- 'pay_type_id' => $pay_type_id,
- ]);
- }catch (\Exception $e){
- \Log::debug('构建订单记录失败-订单号: ',base64_decode($this->attach));
- }
- }
- }
|