LakalaController.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Name: 芸众商城系统
  5. * Author: 广州市芸众信息科技有限公司
  6. * Profile: 广州市芸众信息科技有限公司位于国际商贸中心的广州,专注于移动电子商务生态系统打造,拥有芸众社交电商系统、区块链数字资产管理系统、供应链管理系统、电子合同等产品/服务。官网 :www.yunzmall.com www.yunzshop.com
  7. * Date: 2022/2/17
  8. * Time: 17:24
  9. */
  10. namespace app\payment\controllers;
  11. use app\common\helpers\Url;
  12. use app\common\models\PayOrder;
  13. use app\common\models\PayType;
  14. use app\payment\PaymentController;
  15. use Yunshop\LaKaLaPay\services\LaKaLaPay;
  16. class LakalaController extends PaymentController
  17. {
  18. const LAKALA_WECHAT = 83;
  19. const LAKALA_ALIPAY = 84;
  20. // 支付宝同步回调
  21. public function redirectUrlAlipay()
  22. {
  23. $this->redirectOrder(self::LAKALA_ALIPAY);
  24. }
  25. // 微信同步回调
  26. public function redirectUrlWecaht()
  27. {
  28. $this->redirectOrder(self::LAKALA_WECHAT);
  29. }
  30. public function notifyUrlAlipay()
  31. {
  32. return $this->processOrder(self::LAKALA_WECHAT);
  33. }
  34. public function notifyUrlWechat()
  35. {
  36. return $this->processOrder(self::LAKALA_WECHAT);
  37. }
  38. /**
  39. * 支付回调参数
  40. *
  41. * @param $order_no
  42. * @param $parameter
  43. * @return array
  44. */
  45. public function setData($order_no, $trade_no, $total_fee, $pay_type_id, $pay_type)
  46. {
  47. return [
  48. 'total_fee' => $total_fee,
  49. 'out_trade_no' => $order_no,
  50. 'trade_no' => $trade_no,
  51. 'unit' => 'fen',
  52. 'pay_type' => $pay_type,
  53. 'pay_type_id' => $pay_type_id,
  54. ];
  55. }
  56. protected function processOrder($type)
  57. {
  58. $request = request()->all();
  59. $payOrder = PayOrder::where('out_order_no', $request['partner_order_id'])->first();
  60. if (!$payOrder) {
  61. \Log::debug(self::class. '--: 未找到支付订单');
  62. return false;
  63. }
  64. \YunShop::app()->uniacid = $payOrder->uniacid;
  65. \Setting::$uniqueAccountId = $payOrder->uniacid;
  66. $lakala = new LaKaLaPay;
  67. $sign = $lakala->generateSign($request['time'], $request['nonce_str']);
  68. if ($sign != $request['sign']) {
  69. \Log::debug(self::class. '订单校验失败, 非法订单');
  70. return false;
  71. }
  72. $currentPayType = $this->currentPayType($type);
  73. $data = $this->setData($request['partner_order_id'], $request['channel_order_id'], $request['real_fee'], $currentPayType['id'], $currentPayType['name']);
  74. $this->payResutl($data);
  75. \Log::debug(self::class . '订单支付成功--订单号: ' . $request['order_no']);
  76. echo 'success';
  77. }
  78. private function redirectOrder($type)
  79. {
  80. $request = request()->all();
  81. $order_info = unserialize($request['afford']);
  82. \YunShop::app()->uniacid = $order_info['i'];
  83. $currentPayType = $this->currentPayType($type);
  84. $payOrder = PayOrder::getPayOrderInfo($order_info['order_no'])->first();
  85. if ($payOrder && $payOrder->status == 1) {
  86. $data = $this->setData($order_info['order_no'], $request['trade_no'], ($request['rmb_fee'] * 100), $currentPayType['id'], $currentPayType['name']);
  87. $this->payResutl($data);
  88. \Log::debug(self::class . '订单支付成功--订单号: ' . $order_info['order_no']);
  89. redirect(Url::absoluteApp('member/payYes', ['i' => $order_info['i']]))->send();
  90. }
  91. if ($payOrder && $payOrder->status == 2) {
  92. redirect(Url::absoluteApp('member/payYes', ['i' => $order_info['i']]))->send();
  93. }
  94. if (!$payOrder) {
  95. redirect(Url::absoluteApp('member/payErr', ['i' => $order_info['i']]))->send();
  96. }
  97. }
  98. public function currentPayType($payId)
  99. {
  100. return PayType::find($payId);
  101. }
  102. }