CreateRefundSendTrait.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. namespace addons\WangDianTong\common\traits;
  3. use addons\WangDianTong\common\enums\WangDianTongEnum;
  4. use addons\WangDianTong\common\expand\sdk\wangdian\model\OrderCreate;
  5. use addons\WangDianTong\common\expand\sdk\wangdian\src\CreateOrder;
  6. use addons\WangDianTong\common\expand\sdk\wangdian\src\CreateRefund;
  7. use addons\WangDianTong\common\listeners\RefundUpdateListener;
  8. use addons\WangDianTong\common\service\CreateRefundService;
  9. use common\enums\StatusEnum;
  10. use yii\helpers\Json;
  11. use addons\WangDianTong\common\expand\sdk\wangdian\model\Order;
  12. use addons\WangDianTong\common\expand\sdk\wangdian\model\OrderItem;
  13. trait CreateRefundSendTrait
  14. {
  15. /**
  16. * @param array $config
  17. * @param array $trade_list
  18. * @return mixed|string|true
  19. */
  20. protected function send(array $config, array $trade_list)
  21. {
  22. $req = new CreateRefund($config);
  23. $refundCreate = new \addons\WangDianTong\common\expand\sdk\wangdian\model\CreateRefund();
  24. $refundCreate->api_refund_list = Json::encode($trade_list);
  25. $resp = $req->send($refundCreate);
  26. if ($resp->getError()) return $resp->getError();
  27. // 执行其他操作
  28. try {
  29. $res = $resp->toArray();
  30. if (!isset($res['code']) || $res['code'] != StatusEnum::DISABLED) return $res['message'] ?? var_export($res, true);
  31. } catch (\Exception $e) {
  32. return $e->getMessage();
  33. }
  34. return true;
  35. }
  36. /**
  37. * @param array $config
  38. * @param array $refund
  39. * @param int $refund_status
  40. * @return void
  41. * @throws \Exception
  42. */
  43. public function enterprise(array $config, array $refund, int $refund_status)
  44. {
  45. // 判断当前订单是否已经发货
  46. if ($refund['orderDetail']['shipping_status'] == StatusEnum::ENABLED) {
  47. $trade_list[] = (new CreateRefundService())->assembleData($refund, $config);
  48. $flag = $this->retry(function () use ($config, $trade_list) {
  49. return $this->send($config, $trade_list);
  50. });
  51. } else {
  52. // 未发货
  53. $flag = true;
  54. (new RefundUpdateListener())->async_handle(['id' => $refund['order_id'], 'refund_status' => $refund_status]);
  55. }
  56. if (is_string($flag)) throw new \Exception($flag);
  57. return $flag;
  58. }
  59. /**
  60. * 未发货退款
  61. * @param array $config
  62. * @param array $order
  63. * @param array $orderDetail
  64. * @return mixed|true|null
  65. */
  66. protected function updateTradePush(array $config, array $order, array $orderDetail)
  67. {
  68. // 组装数据
  69. $orderModel = new Order();
  70. $orderModel->tid = $order['order_no'];
  71. $orderItemModel = new OrderItem();
  72. $orderItemModel->refund_status = WangDianTongEnum::ORDER_REFUND_MAP[$orderDetail['is_feedback']] ?? 0;;
  73. $orderItemModel->oid = "{$order['order_no']}_{$orderDetail['id']}";
  74. $orderModel->order_list = Json::encode([
  75. $orderItemModel->toArray()
  76. ]);
  77. // 创建请求
  78. $trade_list[] = $orderModel->toArray();
  79. return $this->retry(function () use ($config, $trade_list) {
  80. // 这里执行
  81. return $this->tradeSend($config, $trade_list);
  82. });
  83. }
  84. /**
  85. * @param array $config
  86. * @param array $trade_list
  87. * @return mixed|string|true
  88. */
  89. protected function tradeSend(array $config, array $trade_list)
  90. {
  91. $req = new CreateOrder($config);
  92. $orderCreate = new OrderCreate();
  93. $orderCreate->switch = StatusEnum::DISABLED;
  94. $orderCreate->shop_no = $config['shop_no'];
  95. $orderCreate->trade_list = Json::encode($trade_list);
  96. $resp = $req->send($orderCreate);
  97. if ($resp->getError()) return $resp->getError();
  98. // 执行其他操作
  99. try {
  100. $res = $resp->toArray();
  101. if (!isset($res['code']) || $res['code'] != StatusEnum::DISABLED) return $res['message'] ?? var_export($res, true);
  102. } catch (\Exception $e) {
  103. return $e->getMessage();
  104. }
  105. return true;
  106. }
  107. }