dada.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <?php
  2. /**
  3. * User: admin
  4. * Date Time: 2021/3/25 21:38
  5. */
  6. namespace common\components\dada;
  7. use common\components\dada\api\cityCodeApi;
  8. use common\components\dada\api\orderApi;
  9. use common\components\dada\config\config;
  10. use common\components\dada\protocol\requestClient;
  11. use common\components\util;
  12. use Yii;
  13. //达达快递
  14. class dada
  15. {
  16. //cityCode
  17. public static function getCityCode($sourceId)
  18. {
  19. $config = self::getConfig($sourceId);
  20. $api = new cityCodeApi('');
  21. $client = new requestClient($config,$api);
  22. $resp = $client->makeRequest();
  23. return self::handleResp($resp);
  24. }
  25. //新增订单
  26. /*
  27. *
  28. shop_no String 是 门店编号,门店创建后可在门店列表和单页查看
  29. origin_id String 是 第三方订单ID
  30. city_code String 是 订单所在城市的code(查看各城市对应的code值)
  31. cargo_price Double 是 订单金额(单位:元)
  32. is_prepay Integer 是 是否需要垫付 1:是 0:否 (垫付订单金额,非运费)
  33. receiver_name String 是 收货人姓名
  34. receiver_address String 是 收货人地址
  35. receiver_lat Double 是 收货人地址纬度(高德坐标系,若是其他地图经纬度需要转化成高德地图经纬度,高德地图坐标拾取器)
  36. receiver_lng Double 是 收货人地址经度(高德坐标系,若是其他地图经纬度需要转化成高德地图经纬度,高德地图坐标拾取器)
  37. callback String 是 回调URL(查看回调说明)
  38. cargo_weight Double 是 订单重量(单位:Kg)
  39. receiver_phone String 否 收货人手机号(手机号和座机号必填一项)
  40. receiver_tel String 否 收货人座机号(手机号和座机号必填一项)
  41. tips Double 否 小费(单位:元,精确小数点后一位)
  42. info String 否 订单备注
  43. cargo_type Integer 否 订单商品类型:食品小吃-1,饮料-2,鲜花-3,文印票务-8,便利店-9,水果生鲜-13,同城电商-19, 医药-20,蛋糕-21,酒品-24,小商品市场-25,服装-26,汽修零配-27,数码-28,小龙虾-29,火锅-51,其他-5
  44. cargo_num Integer 否 订单商品数量
  45. invoice_title String 否 发票抬头
  46. origin_mark String 否 订单来源标示(只支持字母,最大长度为10)
  47. origin_mark_no String 否 订单来源编号,最大长度为30,该字段可以显示在骑士APP订单详情页面,示例:origin_mark_no:"#京东到家#1"达达骑士APP看到的是:#京东到家#1
  48. is_use_insurance Integer 否是否使用保价费(0:不使用保价,1:使用保价; 同时,请确保填写了订单金额(cargo_price))商品保价费(当商品出现损坏,可获取一定金额的赔付)保费=配送物品实际价值*费率(5‰),配送物品价值及最高赔付不超过10000元, 最高保费为50元(物品价格最小单位为100元,不足100元部分按100元认定,保价费向上取整数, 如:物品声明价值为201元,保价费为300元*5‰=1.5元,取整数为2元。)若您选择不保价,若物品出现丢失或损毁,最高可获得平台30元优惠券。 (优惠券直接存入用户账户中)。
  49. is_finish_code_needed Integer 否 收货码(0:不需要;1:需要。收货码的作用是:骑手必须输入收货码才能完成订单妥投)
  50. delay_publish_time Integer 否 预约发单时间(预约时间unix时间戳(10位),精确到分;整分钟为间隔,并且需要至少提前5分钟预约,可以支持未来3天内的订单发预约单。)
  51. is_direct_delivery Integer 否 是否选择直拿直送(0:不需要;1:需要。选择直拿直送后,同一时间骑士只能配送此订单至完成,同时,也会相应的增加配送费用)
  52. product_list Object 否 订单商品明细
  53. pick_up_pos String 否 货架信息,该字段可在骑士APP订单备注中展示
  54. product_list:参数
  55. sku_name String 是 商品名称,限制长度128
  56. src_product_no String 是 商品编码,限制长度64
  57. count Double 是 商品数量,精确到小数点后两位
  58. unit String 否 商品单位,默认:件
  59. */
  60. /*
  61. {
  62. "status": "success",
  63. "result": {
  64. "distance": 53459.98,
  65. "fee": 51.0
  66. "deliverFee": 51.0
  67. },
  68. "code": 0,
  69. "msg": "成功"
  70. }
  71. */
  72. public static function addOrder($sourceId,$params)
  73. {
  74. $config = self::getConfig($sourceId);
  75. $api = new orderApi();
  76. //body内容
  77. $api->addOrder($params);
  78. $client = new requestClient($config,$api);
  79. $resp = $client->makeRequest();
  80. return self::handleResp($resp);
  81. }
  82. //运费查询(参数跟新增订单一致)
  83. public static function queryDeliverFee($sourceId,$params)
  84. {
  85. $config = self::getConfig($sourceId);
  86. $api = new orderApi();
  87. $api->queryDeliverFee($params);
  88. $client = new requestClient($config,$api);
  89. $resp = $client->makeRequest();
  90. return self::handleResp($resp);
  91. }
  92. //订单重发(参数跟新增订单一致)
  93. public static function reAddOrder($sourceId,$params)
  94. {
  95. $config = self::getConfig($sourceId);
  96. $api = new orderApi();
  97. $api->reAddOrder($params);
  98. $client = new requestClient($config,$api);
  99. $resp = $client->makeRequest();
  100. return self::handleResp($resp);
  101. }
  102. //订单取消 (可以用自定义的理由)
  103. /*
  104. order_id String 是 第三方订单编号
  105. cancel_reason_id Integer 是 取消原因ID(取消原因列表)
  106. cancel_reason String 否 取消原因(当取消原因ID为其他时,此字段必填)
  107. */
  108. public static function formalCancel($sourceId,$orderSn,$reasonId)
  109. {
  110. $config = self::getConfig($sourceId);
  111. $api = new orderApi();
  112. $params = [
  113. 'order_id'=>$orderSn,
  114. 'cancel_reason_id'=>$reasonId,
  115. ];
  116. $api->formalCancel($params);
  117. $client = new requestClient($config,$api);
  118. $resp = $client->makeRequest();
  119. return self::handleResp($resp);
  120. }
  121. //订单状态查询
  122. public static function statusQuery($sourceId,$orderSn)
  123. {
  124. $config = self::getConfig($sourceId);
  125. $api = new orderApi();
  126. $params = [
  127. 'order_id'=>$orderSn,
  128. ];
  129. $api->queryOrderStatus($params);
  130. $client = new requestClient($config,$api);
  131. $resp = $client->makeRequest();
  132. return self::handleResp($resp);
  133. }
  134. public static function getConfig($sourceId)
  135. {
  136. $config = new config();
  137. $online = Yii::$app->params['dadaOnline'];
  138. $appKey = Yii::$app->params['dadaAppKey'];
  139. $appSecret = Yii::$app->params['dadaAppSecret'];
  140. if($online){
  141. $config->setSourceId($sourceId);
  142. $config->setHost('https://newopen.imdada.cn');
  143. }else{
  144. //测试 :商户id: 73753 门店id: 11047059
  145. $config->setSourceId(73753);
  146. $config->setHost("http://newopen.qa.imdada.cn");
  147. }
  148. $config->setAppKey($appKey);
  149. $config->setAppSecret($appSecret);
  150. return $config;
  151. }
  152. public static function handleResp($resp)
  153. {
  154. if($resp->getStatus()!='success'){
  155. util::fail($resp->getMsg());
  156. }
  157. return $resp->getResult();
  158. }
  159. }