AlibabaOrder.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace app\controller\api\store\order;
  3. use app\common\repositories\store\order\StoreCartRepository;
  4. use app\services\ThirdParty\AlibabaAgent\OrderService;
  5. use think\facade\Db;
  6. class AlibabaOrder
  7. {
  8. public function checkOrder(StoreCartRepository $cartRepository)
  9. {
  10. $cartId = request()->param('cart_id', []);
  11. $addressId = request()->param('address_id');
  12. if (empty($addressId)) {
  13. return app('json')->fail('请选择收货地址');
  14. }
  15. $postagePrice = 0;
  16. // 判断是否是阿里巴巴商品
  17. $cartInfo = Db::name('store_cart')->whereIn('cart_id', $cartId)->select()->toArray();
  18. $productInfo = Db::name('store_product')->whereIn('product_id', array_column($cartInfo, 'product_id'))->find();
  19. if (!$productInfo['is_alibaba']) {
  20. return app('json')->success(['postagePrice' => $postagePrice]);
  21. }
  22. // 获取地址
  23. $addressInfo = Db::name('user_address')->where('address_id', $addressId)->find();
  24. $addressParam = [
  25. 'fullName' => $addressInfo['real_name'],
  26. 'mobile' => $addressInfo['phone'],
  27. 'provinceText' => $addressInfo['province'],
  28. 'cityText' => $addressInfo['city'],
  29. 'areaText' => $addressInfo['district'],
  30. 'address' => $addressInfo['detail'],
  31. ];
  32. // 获取商品规格
  33. $quantity = array_column($cartInfo, 'cart_num')[0];
  34. $offerId = $productInfo['spu_id'];
  35. $specId = Db::name('store_product_attr_value')->where('product_id', $productInfo['product_id'])->whereIn('unique', array_column($cartInfo, 'product_attr_unique'))->value('spec_id');
  36. $cargoParamList = [
  37. 'offerId' => $offerId,
  38. 'specId' => $specId,
  39. 'quantity' => $quantity
  40. ];
  41. $orderService = new OrderService();
  42. $res = $orderService->previewOrder(['cargoParamList' => $cargoParamList, 'addressParam' => $addressParam]);
  43. if (!$res) {
  44. return app('json')->fail('预下单失败');
  45. }
  46. return app('json')->success(['postagePrice' => $res['preview']['sumCarriage'] / 100, 'flow' => $res['preview']['flowFlag']]);
  47. }
  48. /**
  49. * 查询退款退货原因列表
  50. *
  51. * API: alibaba.trade.getRefundReasonList-1
  52. *
  53. * @return \think\Response
  54. */
  55. public function refundReasonList()
  56. {
  57. $orderId = request()->param('order_id');
  58. $orderEntryIds = request()->param('order_entry_ids', '');
  59. $goodsStatus = request()->param('goods_status', '');
  60. if (empty($orderId)) {
  61. return app('json')->fail('订单号不能为空');
  62. }
  63. $orderService = new OrderService();
  64. $params = ['orderId' => $orderId];
  65. if (!empty($orderEntryIds)) {
  66. $params['orderEntryIds'] = $orderEntryIds;
  67. }
  68. if (!empty($goodsStatus)) {
  69. $params['goodsStatus'] = $goodsStatus;
  70. }
  71. $result = $orderService->getRefundReasonList($params);
  72. if ($result === false) {
  73. return app('json')->fail('获取退款原因失败');
  74. }
  75. return app('json')->success($result);
  76. }
  77. }