tianxia.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578
  1. <?php
  2. class Tianxia {
  3. //测试
  4. //private $tianxia_agent_url = "http://api.tfb8.com/cgi-bin/v2.0/api_aggregate_reg.cgi";
  5. //private $tianxia_check_url = "http://api.tfb8.com/cgi-bin/v2.0/api_merchant_reister_qry.cgi";
  6. //正式
  7. private $tianxia_agent_url = "http://api.tfb8.com/cgi-bin/v2.0/api_aggregate_reg.cgi";
  8. private $tianxia_check_url = "http://api.tfb8.com/cgi-bin/v2.0/api_merchant_reister_qry.cgi";
  9. private $tianxia_business_station_url = "http://api.tfb8.com/cgi-bin/v2.0/api_b2b_permission.cgi";
  10. public static function registerTianxiaAccount($id){
  11. if (!isset($id) || empty($id)){
  12. return '该客户不存在!';
  13. }
  14. $sql = 'select * from wx_tianxia_apply where id = :id;';
  15. $data = Yii::app()->db->createCommand($sql)->queryRow(true,array(':id'=>$id));
  16. if (empty($data) || $data == false) {
  17. return '系统繁忙,请重试!';
  18. }
  19. $params = array();
  20. $paramArray = array();
  21. foreach ($data as $k=>$v){
  22. if($k == 'merchant_name' || $k == 'short_name' || $k == 'address' || $k == 'name' || $k == 'phone' || $k == 'mobile' || $k == 'company_site' || $k == 'idcard' || $k == 'license_name' || $k == 'license' || $k == 'business_scope' || $k == 'bank_license' || $k == 'settle_account_name' || $k == 'settle_account'){
  23. $str = str_replace("&","&",$v);
  24. $str = str_replace("|","|",$str);
  25. $str = str_replace(";",";",$str);
  26. $str = str_replace("$","",$str);
  27. $str = str_replace("%","",$str);
  28. $str = str_replace("<","《",$str);
  29. $str = str_replace(">","》",$str);
  30. $str = str_replace(")",")",$str);
  31. $str = str_replace("(","(",$str);
  32. $str = str_replace("+","",$str);
  33. $str = str_replace(",",",",$str);
  34. $str = str_replace("#","#",$str);
  35. $str = str_replace("=","=",$str);
  36. $str = str_replace("\"","”",$str);
  37. $str = str_replace("'","‘",$str);
  38. $str = str_replace("\\","\",$str);
  39. $str = str_replace("\r\n","",$str);
  40. $str = str_replace("0x4f","",$str);
  41. $str = str_replace("0x0d","",$str);
  42. $str = str_replace("0x0a","",$str);
  43. $str = str_replace(" ","",$str);
  44. $data[$k] = $str;
  45. }
  46. }
  47. $paramArray['spid'] = '1800242893';//采购平台国采商户号 一级商户号
  48. $paramArray['mail'] = $data['email'];
  49. $paramArray['company_name'] = $data['merchant_name'];
  50. $paramArray['short_name'] = $data['short_name'];
  51. $paramArray['address'] = $data['address'];//公司地址
  52. $paramArray['province'] = $data['province_code'];
  53. $paramArray['city'] = $data['city_code'];
  54. $paramArray['area'] = empty($data['district_code'])?$data['city_code']:$data['district_code'];
  55. $paramArray['contact_name'] = $data['name'];
  56. $paramArray['contact_mobile'] = $data['phone'];
  57. $paramArray['contact_tel'] = $data['mobile'];//联系人电话
  58. $paramArray['site'] = empty($data['company_site']) ? 'www.lewaimai.com' : $data['company_site'];//公司网址
  59. $paramArray['owner_creid'] = $data['idcard'];
  60. $paramArray['owner_name'] = $data['license_name'];
  61. $paramArray['oc_start_date'] = $data['idcard_start_date'];//法人身份证件有效日期起点
  62. $paramArray['oc_end_date'] = $data['idcard_end_date'];//法人身份证件有效日期终点
  63. $paramArray['cre_id'] = $data['license'];
  64. $paramArray['creid_start_date'] = $data['license_start_date'];//营业执照号有效期起点
  65. $paramArray['creid_end_date'] = $data['license_end_date'];//营业执照号有效期终点
  66. //营业执照照片
  67. $params['creid_pic'] = IMAGEDOMAIN.$data['business_license_c'];
  68. $paramAr = file_get_contents(IMAGEDOMAIN.$data['business_license_c']);
  69. $imgarr1 = explode("/", $data['business_license_c']);
  70. $paramArray['creid_pic_name'] = $imgarr1[count($imgarr1)-1];
  71. $paramArray['creid_md5'] = md5($paramAr);
  72. //法人正面照片
  73. $params['owner_pic_front'] = IMAGEDOMAIN.$data['idcard_front'];
  74. $paramAr2 = file_get_contents(IMAGEDOMAIN.$data['idcard_front']);
  75. $imgarr2 = explode("/", $data['idcard_front']);
  76. $paramArray['owner_pic_front_name'] = $imgarr2[count($imgarr2)-1];
  77. $paramArray['owner_front_md5'] = md5($paramAr2);
  78. //法人背面照片
  79. $params['owner_pic_opposite'] = IMAGEDOMAIN.$data['idcard_back'];
  80. $paramAr3 = file_get_contents(IMAGEDOMAIN.$data['idcard_back']);
  81. $imgarr3 = explode("/", $data['idcard_back']);
  82. $paramArray['owner_pic_opposite_name'] = $imgarr3[count($imgarr3)-1];
  83. $paramArray['owner_opposite_md5'] = md5($paramAr3);
  84. //开户行许可照片
  85. $params['account_permission_pic'] = IMAGEDOMAIN.$data['bankcard_front'];
  86. $paramAr4 = file_get_contents(IMAGEDOMAIN.$data['bankcard_front']);
  87. $imgarr4 = explode("/", $data['bankcard_front']);
  88. $paramArray['account_permission_pic_name'] = $imgarr4[count($imgarr4)-1];
  89. $paramArray['account_permission_md5'] = md5($paramAr4);
  90. //图片
  91. /*$params['owner_pic'] = IMAGEDOMAIN.$data['idcard_front'];//法人照片 是身份证照还是什么
  92. $paramA = file_get_contents(IMAGEDOMAIN.$data['idcard_front']);//法人照片 是身份证照还是什么
  93. $imgarr2 = explode("/", $data['idcard_front']);
  94. $paramArray['owner_pic_name'] = $imgarr2[count($imgarr2)-1];
  95. $paramArray['owner_md5'] = md5($paramA);//法人照片 是身份证照还是什么
  96. /*if(isset($data['weixin_code']) && !empty($data['weixin_code'])){
  97. $business_scope = $data['weixin_code'];
  98. }elseif (isset($data['zhifubao_code']) && !empty($data['zhifubao_code'])){
  99. $business_scope = $data['zhifubao_code'];
  100. }elseif (isset($data['qq_code']) && !empty($data['qq_code'])){
  101. $business_scope = $data['qq_code'];
  102. }else{
  103. return '经营类目不能为空';
  104. }*/
  105. $paramArray['field'] = $data['business_type'];//所属行业
  106. $paramArray['business_scope'] = $data['business_scope'];//经营范围 n
  107. $paramArray['settle_type'] = 2;//结算类型 1 - T0,2 - T1
  108. $paramArray['bank_license'] = $data['bank_license'];//开户许可证账号
  109. $paramArray['settle_account_name'] = $data['settle_account_name'];//结算账号户名
  110. $paramArray['settle_account_type'] = $data['settle_account_type'];//结算账号类型 1对公,2对私
  111. $paramArray['settle_method'] = 0;//结算方式 0余额 1银行卡 可不传
  112. $paramArray['agent_spid'] = '1700849288';//代理商商户号 可不传
  113. $paramArray['settle_account'] = $data['settle_account'];//结算账号
  114. $paramArray['settle_account_bank'] = $data['bank_name_code'];//结算账户开户行
  115. $paramArray['bank_no'] = $data['bank_unionpay_code'];//人行支行联行号
  116. $paramArray['settle_account_creid'] = $data['idcard'];//开户人身份证号
  117. $paramArray['bank_province'] = $data['bank_area_code'];
  118. $paramArray['bank_city'] = $data['bank_city_code'];
  119. $paramArray['app_id'] = $data['appid'];
  120. $paramArray['appid_secret'] = 'lwm12345';//交易公众号appid_secret
  121. $paramArray['appid_dir'] = $data['directory'];
  122. //$paramArray['appid_dir'] = $data['directory'];
  123. //$paramArray['appid_dir'] = "https://wap-test.lewaimai.com/lewaimaigod/https://wap-dev.lewaimai.com/lewaimaigod/https://wap.lewaimai.com/lewaimaigod/";
  124. $paramArray['memo'] = 'lwmbeizhu';
  125. $fee_info = array(
  126. array(
  127. "product_type"=>"0101",
  128. "rate"=>"0.5",
  129. ),
  130. array(
  131. "product_type"=>"0102",
  132. "rate"=>"0.5",
  133. ),
  134. array(
  135. "product_type"=>"0103",
  136. "rate"=>"0.5",
  137. ),
  138. array(
  139. "product_type"=>"0201",
  140. "rate"=>"0.5",
  141. ),
  142. array(
  143. "product_type"=>"0202",
  144. "rate"=>"0.5",
  145. ),
  146. array(
  147. "product_type"=>"0203",
  148. "rate"=>"0.5",
  149. ),
  150. array(
  151. "product_type"=>"0204",
  152. "rate"=>"0.5",
  153. ),
  154. array(
  155. "product_type"=>"0205",
  156. "rate"=>"0.5",
  157. ),
  158. array(
  159. "product_type"=>"0301",
  160. "rate"=>"0.5",
  161. ),
  162. array(
  163. "product_type"=>"0302",
  164. "rate"=>"0.5",
  165. ),
  166. array(
  167. "product_type"=>"0303",
  168. "rate"=>"0.5",
  169. ),
  170. array(
  171. "product_type"=>"0401",
  172. "rate"=>"0.5",
  173. ),
  174. array(
  175. "product_type"=>"0402",
  176. "rate"=>"0.5",
  177. ),
  178. array(
  179. "product_type"=>"0601",
  180. "rate"=>"0.5",
  181. ),
  182. array(
  183. "product_type"=>"0602",
  184. "rate"=>"0.5",
  185. ),
  186. );
  187. $fee_info_json = json_encode($fee_info);
  188. $paramArray['fee_info'] = $fee_info_json;
  189. $paramArray['business_kind'] = $data['weixin_code'];
  190. $paramArray['wechat_id'] = $data['wechat_num'];
  191. $paramArray['wechat_user_name'] = $data['wechat_user_name'];
  192. //门店照片
  193. $params['store_pic'] = IMAGEDOMAIN.$data['business_door_c'];
  194. $paramAr5 = file_get_contents(IMAGEDOMAIN.$data['business_door_c']);
  195. $imgarr5 = explode("/", $data['business_door_c']);
  196. $paramArray['store_pic_name'] = $imgarr5[count($imgarr5)-1];
  197. $paramArray['store_md5'] = md5($paramAr5);
  198. //收银台照片
  199. $params['cashier_pic'] = IMAGEDOMAIN.$data['cahsier_pic'];
  200. $paramAr6 = file_get_contents(IMAGEDOMAIN.$data['cahsier_pic']);
  201. $imgarr6 = explode("/", $data['cahsier_pic']);
  202. $paramArray['cashier_pic_name'] = $imgarr6[count($imgarr6)-1];
  203. $paramArray['cashier_md5'] = md5($paramAr6);
  204. //店内照片
  205. $params['indoor_pic'] = IMAGEDOMAIN.$data['work_place'];
  206. $paramAr7 = file_get_contents(IMAGEDOMAIN.$data['work_place']);
  207. $imgarr7 = explode("/", $data['work_place']);
  208. $paramArray['indoor_pic_name'] = $imgarr7[count($imgarr7)-1];
  209. $paramArray['indoor_md5'] = md5($paramAr7);
  210. $spKey = "p*Ii81AEC1";
  211. $tianxia = new Tianxia();
  212. $paramArray['md5_sign'] = $tianxia->getTianxiaSign($paramArray,$spKey);
  213. LewaimaiDebug::LogArray($paramArray);
  214. //$result = LewaimaiHttp::POST($tianxia->tianxai_agent_url,$paramArray);
  215. $result = $tianxia->curl_custom_postfields($tianxia->tianxia_agent_url, $paramArray, $params);
  216. LewaimaiDebug::Log($result);
  217. $result = json_encode(simplexml_load_string($result));
  218. $retStr = trim($result,"\" \"");
  219. LewaimaiDebug::Log($retStr);
  220. $res = json_decode($retStr,true);
  221. //var_dump($res);die;
  222. return $res;
  223. /*$resultArr = json_decode($result,true);
  224. $retSign = array();
  225. foreach ($resultArr as $k=>$v){
  226. if($k == 'retcode' || $k == 'retmsg'){
  227. continue;
  228. }
  229. $retSign[$k] = $v;
  230. }
  231. $resultSign = $tianxia->getTianxiaSign($retSign,$spKey);
  232. if($resultArr['$resultArr'] != $resultSign){
  233. return '验证签名失败!';
  234. }*/
  235. }
  236. /*弃用了*/
  237. public static function checkTianxiaStatus()
  238. {
  239. $connection = \Yii::app()->db;
  240. $sql = 'SELECT * from wx_tianxia_apply WHERE tx_status=1;';
  241. $data = $connection->createCommand($sql)->queryAll();
  242. $paramArray = array();
  243. //$tianxia = new TianxiaregCommand();
  244. $spKey = "p*Ii81AEC1";
  245. $tianxia = new Tianxia();
  246. if(!empty($data)){
  247. foreach ($data as $k=>$v){
  248. $paramArray['spid_second'] = $v['tianxia_id'];
  249. $paramArray['spid'] = $v['spid'];
  250. $paramArray['sign'] = $tianxia->getTianxiaSign($paramArray,$spKey);
  251. \LewaimaiDebug::LogArray($paramArray);
  252. $result = LewaimaiHttp::POST($tianxia->tianxia_check_url,$paramArray);
  253. $result = json_encode(simplexml_load_string($result));
  254. $retStr = trim($result,"\" \"");
  255. $res = json_decode($retStr,true);
  256. \LewaimaiDebug::LogArray(121312413414);
  257. \LewaimaiDebug::LogArray($res);
  258. if(!empty($res) && isset($res['results']['root']['row']['state'])){
  259. $tx_status = $res['results']['root']['row']['state'];
  260. if($tx_status == 2){
  261. $sql = 'UPDATE wx_tianxia_apply SET tx_status = 2 WHERE id = '.$v['id'];
  262. $ret = $connection->createCommand($sql)->execute();
  263. \LewaimaiDebug::LogArray('update1212:'.$ret);
  264. }elseif ($tx_status == 3){
  265. $sql = 'UPDATE wx_tianxia_apply SET tx_status = 3 WHERE id = '.$v['id'];
  266. $ret = $connection->createCommand($sql)->execute();
  267. \LewaimaiDebug::LogArray('update12323:'.$ret);
  268. }
  269. }
  270. }
  271. }
  272. }
  273. public static function openTianxiaBusinessStation($id)
  274. {
  275. $sql = 'select * from wx_tianxia_apply where id = :id;';
  276. $data = Yii::app()->db->createCommand($sql)->queryRow(true,array(':id'=>$id));
  277. if (empty($data) || $data == false) {
  278. return '系统繁忙,请重试!';
  279. }
  280. $paramArray = array();
  281. //$paramArray['spid_senior'] = $data['spid'];
  282. $paramArray['spid_senior'] = '1800242893';
  283. //$paramArray['spid'] = $data['tianxia_id'];
  284. //$paramArray['spid'] = '1800619883';
  285. //$paramArray['spid'] = '1800388369';//有返回
  286. $paramArray['spid'] = '1800048134';
  287. $paramArray['mail'] = "tianxiazhifu@lewaimai.com";
  288. $paramArray['ver'] = "1.0";
  289. $paramArray['sign_type'] = "MD5";
  290. $spKey = "84bacea682a0d47cd54c7388bf80fc4f";
  291. $tianxia = new Tianxia();
  292. $queryStr = $tianxia->getParamStr($paramArray);
  293. $paramArray['sign'] = $tianxia->getTianxiaSign($paramArray,$spKey);
  294. $queryStr .= "&sign={$paramArray['sign']}";
  295. //var_dump($queryStr);die;
  296. LewaimaiDebug::Log("企业站开通权限请求加密内容1: " . $queryStr);
  297. $publicKey = "-----BEGIN PUBLIC KEY-----
  298. MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCjDrkoVbyv4jTxeKtKEiK2mZie
  299. zQvfJV3sGhiwOnB+By5sa5Sa6Ls4dt5AGVqKHxyQVKRpu/utwtEt2MijWx45P1y2
  300. xGe7oDz2hUXP0j8sSa1NP26TmWHwO7czgJxxrdJ6RNqskSfjwsa5YMsqmcrumxUI
  301. xeCg5EOkgU26bnPoZQIDAQAB
  302. -----END PUBLIC KEY-----";
  303. $privateKey = "-----BEGIN RSA PRIVATE KEY-----
  304. MIICXAIBAAKBgQDQbZpCgzcGlec+HYBveOVBNOSGeiU6dfPZytzgHRMeS5rpr4oH
  305. NXeXhUb9ANM2rTInKxQbku4T9B4VNjdyVBgkh/+6ztyDZo5FqkErfvmb/ycSqH22
  306. VRP89gFmr9oF2LubEihfcgqiOyPlQIrX1pXlgXrTpMZk6con2Xzj8N235wIDAQAB
  307. AoGAX8wgfLWmkuZPVKNmptWgOWpAJvb5KXeRTucIwhFa+i+x0fqWrF2MzB271QmO
  308. CrFsPch1A39y4cTwFrvGnEu+lCcvV6VBrePqal+mN6Em06RHzYwsRdEQDPrcc2SV
  309. XKDcu/oda9UOqSA27MEvaSrSt1AeIKOF+zG3Xrr+TMz2xaECQQDz1p5EyK8cBizv
  310. ZYl6V7DEbyr6pOfFP23eCd5g30BHOVmefLfAm0l94kIwPOwjsaNMqJhGw7edka0+
  311. BsU3JTafAkEA2tLb4CikObxGz0ix+/FgKb4X88sXByvS8KgMvpzvXQr1tB0DGhFQ
  312. jle+Fr66+1poSm4KvX9UsS5lRbM2AFlhuQJBALGXuqX2VDNg/BFQLpUAkSpAnVj4
  313. CiZLUEXLgj+j2jkFuBQKWfraHuikhfiEJqjIlFsc3+uKWI1WsIrge3ryi5kCQHG8
  314. x6xrc3DO+78h+eEKRQFtXOXK2d1QWgPcVUN+Lqwd1jgYHFSgS06xLIyF9opPI4YM
  315. TGjSliLCCsF/tMHZs4ECQEg06iiqxkkyBkyLroOWn+pa9HLURoiYe5umGnlxbz5o
  316. wPEmCvMOlxKEiG8haVTznxzWdy6XLAdY4uhKcokX6K0=
  317. -----END RSA PRIVATE KEY-----";
  318. $encode = $tianxia->rsaEncrypt($queryStr,$publicKey);
  319. //var_dump($encode);die;
  320. LewaimaiDebug::Log("企业站开通权限请求加密内容2: " . $encode);
  321. $reqParams = array('cipher_data' => $encode);
  322. $result = LewaimaiHttp::POST($tianxia->tianxia_business_station_url,$reqParams);
  323. $result = json_encode(simplexml_load_string($result));
  324. $retStr = trim($result,"\" \"");
  325. $res = json_decode($retStr,true);
  326. \LewaimaiDebug::LogArray(121312413414);
  327. \LewaimaiDebug::LogArray($res);
  328. if($res['retcode'] == '00'){
  329. }
  330. var_dump($result);
  331. var_dump($res);
  332. //解密
  333. $lwmRet = $tianxia->rsaDecrypt($res['cipher_data'],$privateKey);
  334. var_dump($lwmRet);die;
  335. //var_dump($lwmRet);die;
  336. var_dump($queryStr);
  337. var_dump(date('Y-m-d H:i:s'));
  338. var_dump($result);die;
  339. }
  340. /**
  341. * Rsa加密
  342. * @param string $content - 待加密内容
  343. * @return string
  344. */
  345. private function rsaEncrypt($content,$publicKey)
  346. {
  347. if (empty($publicKey)) {
  348. //Logger::error("找不到rsa公钥, path={$this->_channelConfig->publicKey}");
  349. LewaimaiDebug::Log('找不到rsa公钥112');
  350. return false;
  351. }
  352. $key = $publicKey;
  353. $crypto = '';
  354. foreach (str_split($content, 117) as $chunk) {
  355. if (!openssl_public_encrypt($chunk, $encryptData, $key)) {
  356. LewaimaiDebug::Log("rsa encrypt error, " . openssl_error_string ());
  357. return '';
  358. }
  359. $crypto .= $encryptData;
  360. }
  361. return base64_encode($crypto);
  362. }
  363. /**
  364. * rsa解密
  365. * @param string $encryptData - 密文
  366. * @return bool|string
  367. */
  368. public function rsaDecrypt($encryptData,$privateKey)
  369. {
  370. /*if (!file_exists($this->_channelConfig->privateKey)) {
  371. Logger::error("找不到rsa私钥, path={$this->_channelConfig->privateKey}");
  372. return false;
  373. }
  374. $key = file_get_contents($this->_channelConfig->privateKey);*/
  375. if($privateKey){
  376. LewaimaiDebug::Log('找不到rsa私钥112');
  377. return false;
  378. }
  379. $key = $privateKey;
  380. $crypto = '';
  381. foreach (str_split(base64_decode($encryptData), 128) as $chunk) {
  382. if (!openssl_private_decrypt($chunk, $decryptData, $key)) {
  383. Logger::error("rsa decrypt error, " . openssl_error_string ());
  384. return false;
  385. }
  386. $crypto .= $decryptData;
  387. }
  388. return $crypto;
  389. }
  390. //获取签名
  391. private function getTianxiaSign($paramArray,$spKey)
  392. {
  393. if(empty($paramArray) || empty($spKey)){
  394. return false;
  395. }
  396. ksort($paramArray);
  397. $signArr = array();
  398. foreach ($paramArray as $k=>$v){
  399. if (!empty($v) || $v === 0){
  400. array_push($signArr,$k.'='.$v);
  401. }
  402. }
  403. array_push($signArr,'key'.'='.$spKey);
  404. $stringSign = implode('&',$signArr);
  405. //$stringSign .= 'key'.'='.$spKey;
  406. LewaimaiDebug::Log('tianixa sign 1:'.$stringSign);
  407. //var_dump($stringSign);die;
  408. $sign = strtolower(md5($stringSign));
  409. //var_dump($sign);die;
  410. LewaimaiDebug::Log('tianixa sign 2:'.$sign);
  411. return $sign;
  412. }
  413. /**
  414. * 提交进件信息到天下服务器
  415. * @Author wulingao
  416. * @DateTime 2017-10-17
  417. * @param [type] $url [description]
  418. * @param array $assoc [description]
  419. * @param array $files [description]
  420. * @return [type] [description]
  421. */
  422. private function curl_custom_postfields($url, array $assoc = array(), array $files = array())
  423. {
  424. static $disallow = array("\0", "\"", "\r", "\n");
  425. foreach ($assoc as $k => $v) {
  426. $k = str_replace($disallow, "_", $k);
  427. $body[] = implode("\r\n", array(
  428. "Content-Disposition: form-data; name=\"{$k}\"",
  429. "Content-Type: application/octet-stream;charset=UTF-8",
  430. "",
  431. filter_var($v),
  432. ));
  433. }
  434. if (!empty($files)) {
  435. foreach ($files as $k => $v) {
  436. if(strlen(file_get_contents($v)) > 260000){ //压缩图片
  437. LewaimaiDebug::Log('filesize1:'.strlen(file_get_contents($v)));
  438. $v = $v.'!width300';
  439. LewaimaiDebug::Log('filesize2:'.strlen(file_get_contents($v)));
  440. }
  441. $data = file_get_contents($v);
  442. $v = call_user_func("end", explode(DIRECTORY_SEPARATOR, $v));
  443. $k = str_replace($disallow, "_", $k);
  444. $v = str_replace($disallow, "_", $v);
  445. $body[] = implode("\r\n", array(
  446. "Content-Disposition: form-data; name=\"{$k}\"; filename=\"{$v}\"",
  447. "Content-Type: application/octet-stream;charset=UTF-8",
  448. "",
  449. $data,
  450. ));
  451. }
  452. }
  453. do {
  454. $boundary = "---------------------" . md5(mt_rand() . microtime());
  455. } while (preg_grep("/{$boundary}/", $body));
  456. // add boundary for each parameters
  457. array_walk($body, function (&$part) use ($boundary) {
  458. $part = "--{$boundary}\r\n{$part}";
  459. });
  460. // add final boundary
  461. $body[] = "--{$boundary}--";
  462. $body[] = "";
  463. $ch1 = curl_init ();
  464. // $newLeshua = new Newleshua();
  465. curl_setopt ( $ch1, CURLOPT_URL, $url);
  466. curl_setopt ( $ch1, CURLOPT_POST, 1 );
  467. curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 );
  468. curl_setopt ( $ch1, CURLOPT_CONNECTTIMEOUT, 30 );
  469. curl_setopt ( $ch1, CURLOPT_SSL_VERIFYPEER, FALSE );
  470. curl_setopt ( $ch1, CURLOPT_SSL_VERIFYHOST, false );
  471. LewaimaiDebug::Log('pass parameters to the tiaxia');
  472. LewaimaiDebug::LogArray($body);
  473. // set options
  474. @curl_setopt_array($ch1, array(
  475. CURLOPT_POST => true,
  476. CURLOPT_POSTFIELDS => implode("\r\n", $body),
  477. CURLOPT_HTTPHEADER => array(
  478. "Expect: 100-continue",
  479. "Content-Type: multipart/form-data; boundary={$boundary}", // change Content-Type
  480. ),
  481. ));
  482. $result = curl_exec ( $ch1 );
  483. LewaimaiDebug::Log('tianixa return time');
  484. curl_close ( $ch1 );
  485. return $result;
  486. }
  487. /**
  488. * 获取参数字符串
  489. * @param array $srcParams - 请求参数
  490. * @return string
  491. */
  492. private function getParamStr($srcParams)
  493. {
  494. if (empty($srcParams)) {
  495. return '';
  496. }
  497. unset($srcParams['sign']);
  498. $params = [];
  499. foreach ($srcParams as $k => $v) {
  500. if ( $v != null && $v != '') {
  501. $params[$k] = $v;
  502. }
  503. }
  504. ksort($params, SORT_STRING);
  505. $tmpParams = [];
  506. foreach ($params as $k => $v) {
  507. $tmpParams[] = "{$k}={$v}";
  508. }
  509. $queryStr = implode("&", $tmpParams);
  510. return $queryStr;
  511. }
  512. }