LeshuaController.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Name: 芸众商城系统
  5. * Author: 广州市芸众信息科技有限公司
  6. * Profile: 广州市芸众信息科技有限公司位于国际商贸中心的广州,专注于移动电子商务生态系统打造,拥有芸众社交电商系统、区块链数字资产管理系统、供应链管理系统、电子合同等产品/服务。官网 :www.yunzmall.com www.yunzshop.com
  7. * Date: 2022/3/30
  8. * Time: 17:58
  9. */
  10. namespace app\payment\controllers;
  11. use app\common\models\PayOrder;
  12. use app\common\models\PayType;
  13. use app\payment\PaymentController;
  14. use Yunshop\LeshuaPay\models\XmlToArray;
  15. use Yunshop\LeshuaPay\services\LeshuaPay;
  16. class LeshuaController extends PaymentController
  17. {
  18. const LESHUA_ALIPAY = 85;
  19. const LESHUA_WECHAT = 86;
  20. const LESHUA_POS = 87;
  21. /**
  22. * @return null
  23. */
  24. public function notifyUrlAlipay()
  25. {
  26. return $this->processOrder(self::LESHUA_ALIPAY);
  27. }
  28. public function notifyUrlWechat()
  29. {
  30. return $this->processOrder(self::LESHUA_WECHAT);
  31. }
  32. public function notifyUrlPos()
  33. {
  34. return $this->processOrder(self::LESHUA_POS);
  35. }
  36. /**
  37. * 支付回调参数
  38. *
  39. * @param $order_no
  40. * @param $parameter
  41. * @return array
  42. */
  43. public function setData($order_no, $trade_no, $total_fee, $pay_type_id, $pay_type)
  44. {
  45. return [
  46. 'total_fee' => $total_fee,
  47. 'out_trade_no' => $order_no,
  48. 'trade_no' => $trade_no,
  49. 'unit' => 'fen',
  50. 'pay_type' => $pay_type,
  51. 'pay_type_id' => $pay_type_id,
  52. ];
  53. }
  54. protected function processOrder($type)
  55. {
  56. $xml = request()->getContent();
  57. $data = XmlToArray::convert($xml, true);
  58. \Log::debug(self::class. '--: 乐刷数据: ' . json_encode($data));
  59. $sign = $data['sign'];
  60. $data['attach'] = empty($data['attach']) ? "" : $data['attach'];
  61. $data['goods_tag'] = empty($data['goods_tag']) ? "" : $data['goods_tag'];
  62. unset($data['error_code']);
  63. unset($data['sign']);
  64. unset($data['@root']);
  65. $payOrder = PayOrder::where('out_order_no', $data['third_order_id'])->first();
  66. if (!$payOrder) {
  67. \Log::debug(self::class. '--: 未找到支付订单');
  68. return;
  69. }
  70. \YunShop::app()->uniacid = $payOrder->uniacid;
  71. \Setting::$uniqueAccountId = $payOrder->uniacid;
  72. $leshua = new LeshuaPay;
  73. $res = $leshua->verifySign($data, $sign);
  74. if (!$res) {
  75. \Log::debug(self::class . '验证签名失败: ');
  76. // 触发自主查询订单.
  77. $queryRes = $leshua->queryOrder($data['third_order_id']);
  78. if ($queryRes['resp_code'] === '0' && $queryRes['result_code'] === '0' && $queryRes['status'] == 2) {
  79. \Log::debug(self::class . '自主查询订单: 支付成功');
  80. } else {
  81. \Log::debug(self::class . '自主查询订单: 支付失败 ' . json_encode($queryRes));
  82. return;
  83. }
  84. }
  85. $currentPayType = $this->currentPayType($type);
  86. $data = $this->setData($data['third_order_id'], $data['third_order_id'], $data['amount'], $currentPayType['id'], $currentPayType['name']);
  87. $this->payResutl($data);
  88. \Log::debug(self::class . '订单支付成功--订单号: ' . $data['third_order_id']);
  89. echo '000000';
  90. }
  91. public function currentPayType($payId)
  92. {
  93. return PayType::find($payId);
  94. }
  95. }