AuthPayController.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Name: 芸众商城系统
  5. * Author: 广州市芸众信息科技有限公司
  6. * Profile: 广州市芸众信息科技有限公司位于国际商贸中心的广州,专注于移动电子商务生态系统打造,拥有芸众社交电商系统、区块链数字资产管理系统、供应链管理系统、电子合同等产品/服务。官网 :www.yunzmall.com www.yunzshop.com
  7. * Date: 2022/12/27
  8. * Time: 11:04
  9. */
  10. namespace app\payment\controllers;
  11. use app\common\facades\Setting;
  12. use app\common\models\PayOrder;
  13. use app\common\models\PayType;
  14. use app\payment\PaymentController;
  15. use Yunshop\SubAuthPayment\models\SubOrder;
  16. use Yunshop\SubAuthPayment\services\ManageService;
  17. class AuthPayController extends PaymentController
  18. {
  19. protected $jsonData;
  20. public function notifyUrl()
  21. {
  22. $this->validator();
  23. if (!$this->jsonData['data']['uniacid']) {
  24. return $this->errorJson('缺少必要参数: uniacid');
  25. }
  26. $this->setUniacid($this->jsonData['data']['uniacid']);
  27. $set = Setting::get('sub-auth-payment.set');
  28. if ($set['appid'] !== $this->jsonData['appid']) {
  29. return $this->errorJson('商户不存在');
  30. }
  31. $manageService = new ManageService;
  32. $result = $manageService->verify($this->jsonData, $set['secret']);
  33. $payOrder = PayOrder::where('out_order_no', $this->jsonData['data']['pay_sn'])->first();
  34. if (!$payOrder) {
  35. \Log::debug(self::class . '--: 未找到支付订单');
  36. return $this->errorJson('未找到支付订单');
  37. }
  38. $subOrder = SubOrder::firstOrNew([
  39. 'uniacid' => $this->jsonData['data']['uniacid'],
  40. 'pay_sn' => $this->jsonData['data']['pay_sn'],
  41. ]);
  42. $subOrder->member_id = $payOrder->member_id;
  43. $subOrder->amount = $this->jsonData['data']['amount'];
  44. $subOrder->type = 1;
  45. if ($result) {
  46. $currentPayType = $this->currentPayType(105);
  47. $payResultData = $this->setData($this->jsonData['data']['pay_sn'], $this->jsonData['data']['pay_sn'], ($this->jsonData['data']['amount'] * 100), $currentPayType['id'], $currentPayType['name']);
  48. $this->payResutl($payResultData);
  49. \Log::debug(self::class . '订单支付成功--订单号: ' . $this->jsonData['data']['pay_sn']);
  50. $subOrder->save();
  51. return $this->successJson();
  52. }
  53. return $this->errorJson();
  54. }
  55. protected function validator()
  56. {
  57. if (!request()->isMethod('post')) {
  58. return $this->errorJson('请求方式错误');
  59. }
  60. $jsonData = request()->json()->all();
  61. \Log::debug(self::class . '--: 微信借权支付回调通知: ' . json_encode($jsonData));
  62. if (!$jsonData) {
  63. return $this->errorJson('参数异常');
  64. }
  65. if (!$jsonData['appid'] || !$jsonData['data'] || !$jsonData['sign']) {
  66. return $this->errorJson('请确认必填参数');
  67. }
  68. $this->jsonData = $jsonData;
  69. }
  70. protected function setUniacid($uniacid)
  71. {
  72. \YunShop::app()->uniacid = $uniacid;
  73. Setting::$uniqueAccountId = $uniacid;
  74. }
  75. private function currentPayType($payId)
  76. {
  77. return PayType::find($payId);
  78. }
  79. /**
  80. * 支付回调参数
  81. *
  82. * @param $order_no
  83. * @param $parameter
  84. * @return array
  85. */
  86. public function setData($order_no, $trade_no, $total_fee, $pay_type_id, $pay_type)
  87. {
  88. return [
  89. 'total_fee' => $total_fee,
  90. 'out_trade_no' => $order_no,
  91. 'trade_no' => $trade_no,
  92. 'unit' => 'fen',
  93. 'pay_type' => $pay_type,
  94. 'pay_type_id' => $pay_type_id,
  95. ];
  96. }
  97. }