RejectedController.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. namespace App\Http\Controllers\api\thirdPart\jianshang;
  3. use App\Http\Controllers\Controller;
  4. use App\Rejected;
  5. use Carbon\Carbon;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Collection;
  8. use Zttp\Zttp;
  9. class RejectedController extends Controller
  10. {
  11. function sendRejected(Rejected $rejected){
  12. $amount = $rejected['amount'] ?? '';
  13. $created_at = $rejected['created_at'] ?? '';
  14. $fee_collected = $rejected['fee_collected'] ?? '';
  15. $goods_barcode = $rejected['barcode_goods'] ?? '';
  16. $goods_name = $rejected['name_goods'] ?? '';
  17. $logistic_name_return = $rejected->logisticName();
  18. $logistic_number = $rejected['logistic_number'] ?? '';
  19. $logistic_number_return = $rejected['logistic_number_return'] ?? '';
  20. $order_number = $rejected['order_number'] ?? '';
  21. $quality_label = $rejected->qualityLabelName();
  22. $sender_mobile = $rejected['mobile_sender'] ?? '';
  23. $sender_name = $rejected['sender'] ?? '';
  24. $json = $this->packSendToRemote($amount,$created_at,$fee_collected,$goods_barcode,
  25. $goods_name,$logistic_name_return,$logistic_number,$logistic_number_return,$order_number,
  26. $quality_label,$sender_mobile,$sender_name);
  27. if(!$json){
  28. $this->log(__METHOD__,'error'.'_'.$logistic_number_return,"没有返回");
  29. return false;
  30. }
  31. if(!$json['success']){
  32. $this->log(__METHOD__,'error'.'_'.$logistic_number_return,"返回错误:".json_encode($json));
  33. return false;
  34. }else{
  35. $this->log(__METHOD__,'JianshangResponse'.'_'.$logistic_number_return,json_encode($json));
  36. }
  37. return $json;
  38. }
  39. function sendRejectedByApi(Request $request){
  40. $amount = $request->input('amount') ?? '';
  41. $created_at = $request->input('created_at') ?? '';
  42. $fee_collected = $request->input('fee_collected') ?? '';
  43. $goods_barcode = $request->input('goods_barcode') ?? '';
  44. $goods_name = $request->input('goods_name') ?? '';
  45. $logistic_name_return = $request->input('logistic_name_return') ?? '';
  46. $logistic_number = $request->input('logistic_number') ?? '';
  47. $logistic_number_return = $request->input('logistic_number_return') ?? '';
  48. $order_number = $request->input('order_number') ?? '';
  49. $quality_label = $request->input('quality_label') ?? '';
  50. $sender_mobile = $request->input('sender_mobile') ?? '';
  51. $sender_name = $request->input('sender_name') ?? '';
  52. $json = $this->packSendToRemote($amount,$created_at,$fee_collected,$goods_barcode,
  53. $goods_name,$logistic_name_return,$logistic_number,$logistic_number_return,$order_number,
  54. $quality_label,$sender_mobile,$sender_name);
  55. if(!$json)return ['success'=>'false','fail_info'=>'没有JSON回复'];
  56. if(!$json['success']){return $this->apiError(__METHOD__,"返回错误:".json_encode($json));}
  57. return $json;
  58. }
  59. private function packSendToRemote($amount,$created_at,$fee_collected,$goods_barcode,
  60. $goods_name,$logistic_name_return,$logistic_number,$logistic_number_return,$order_number,
  61. $quality_label,$sender_mobile,$sender_name){
  62. if(env('api_faking')){
  63. $this->log(__METHOD__,'error_'.__FUNCTION__,'API FAKING');
  64. return false;
  65. }
  66. $data="{\"amount\":\"$amount\", \"created_at\":\"$created_at\", \"fee_collected\":\"$fee_collected\",
  67. \"goods_barcode\":\"$goods_barcode\", \"goods_name\":\"$goods_name\", \"logistic_name_return\":\"$logistic_name_return\",
  68. \"logistic_number\":\"$logistic_number\", \"logistic_number_return\":\"$logistic_number_return\",
  69. \"order_number\":\"$order_number\", \"quality_label\":\"$quality_label\", \"sender_mobile\":\"$sender_mobile\", \"sender_name\":\"$sender_name\"}";
  70. $sortParamsAndMd5=function(Array $params,$timestamp,$nonce,$signKey){
  71. $params=new Collection($params);
  72. $params=$params->sortKeys();
  73. $str='';
  74. $params->each(function($param,$key)use(&$str){
  75. $val=trim($param);
  76. if($val){
  77. $str .= $key.$val;
  78. }
  79. });
  80. return strtolower(md5($str.$timestamp.$nonce.$signKey));
  81. };
  82. $timestamp=intval(microtime(true)*1000);
  83. $nonce=md5(microtime(true));
  84. $sign=$sortParamsAndMd5(json_decode($data,true),$timestamp,$nonce,config('api.sign_key_rejected_send_jianshang'));
  85. $url=config('api.url_rejected_send_jianshang');
  86. $response=Zttp::withHeaders([
  87. 'sign'=>$sign,
  88. 'nonce'=>$nonce,
  89. 'timestamp'=>$timestamp,
  90. 'Content-Type'=>'application/json'
  91. ])->post($url,json_decode($data,true));
  92. $this->log(__METHOD__,__FUNCTION__,$data);
  93. if(!$response){
  94. $this->log(__METHOD__,'error_'.__FUNCTION__,'回复异常:'.$response->body());
  95. return false;
  96. }
  97. if(!$response->json()){
  98. $this->log(__METHOD__,'error_'.__FUNCTION__,'json为空:'.$response->body());
  99. return false;
  100. }
  101. return $response->json();
  102. }
  103. }