db->createCommand($sql)->queryRow(true,array(':id'=>$id)); if (empty($data) || $data == false) { return '系统繁忙,请重试!'; } $params = array(); $paramArray = array(); foreach ($data as $k=>$v){ 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'){ $str = str_replace("&","&",$v); $str = str_replace("|","|",$str); $str = str_replace(";",";",$str); $str = str_replace("$","",$str); $str = str_replace("%","",$str); $str = str_replace("<","《",$str); $str = str_replace(">","》",$str); $str = str_replace(")",")",$str); $str = str_replace("(","(",$str); $str = str_replace("+","",$str); $str = str_replace(",",",",$str); $str = str_replace("#","#",$str); $str = str_replace("=","=",$str); $str = str_replace("\"","”",$str); $str = str_replace("'","‘",$str); $str = str_replace("\\","\",$str); $str = str_replace("\r\n","",$str); $str = str_replace("0x4f","",$str); $str = str_replace("0x0d","",$str); $str = str_replace("0x0a","",$str); $str = str_replace(" ","",$str); $data[$k] = $str; } } $paramArray['spid'] = '1800242893';//采购平台国采商户号 一级商户号 $paramArray['mail'] = $data['email']; $paramArray['company_name'] = $data['merchant_name']; $paramArray['short_name'] = $data['short_name']; $paramArray['address'] = $data['address'];//公司地址 $paramArray['province'] = $data['province_code']; $paramArray['city'] = $data['city_code']; $paramArray['area'] = empty($data['district_code'])?$data['city_code']:$data['district_code']; $paramArray['contact_name'] = $data['name']; $paramArray['contact_mobile'] = $data['phone']; $paramArray['contact_tel'] = $data['mobile'];//联系人电话 $paramArray['site'] = empty($data['company_site']) ? 'www.lewaimai.com' : $data['company_site'];//公司网址 $paramArray['owner_creid'] = $data['idcard']; $paramArray['owner_name'] = $data['license_name']; $paramArray['oc_start_date'] = $data['idcard_start_date'];//法人身份证件有效日期起点 $paramArray['oc_end_date'] = $data['idcard_end_date'];//法人身份证件有效日期终点 $paramArray['cre_id'] = $data['license']; $paramArray['creid_start_date'] = $data['license_start_date'];//营业执照号有效期起点 $paramArray['creid_end_date'] = $data['license_end_date'];//营业执照号有效期终点 //营业执照照片 $params['creid_pic'] = IMAGEDOMAIN.$data['business_license_c']; $paramAr = file_get_contents(IMAGEDOMAIN.$data['business_license_c']); $imgarr1 = explode("/", $data['business_license_c']); $paramArray['creid_pic_name'] = $imgarr1[count($imgarr1)-1]; $paramArray['creid_md5'] = md5($paramAr); //法人正面照片 $params['owner_pic_front'] = IMAGEDOMAIN.$data['idcard_front']; $paramAr2 = file_get_contents(IMAGEDOMAIN.$data['idcard_front']); $imgarr2 = explode("/", $data['idcard_front']); $paramArray['owner_pic_front_name'] = $imgarr2[count($imgarr2)-1]; $paramArray['owner_front_md5'] = md5($paramAr2); //法人背面照片 $params['owner_pic_opposite'] = IMAGEDOMAIN.$data['idcard_back']; $paramAr3 = file_get_contents(IMAGEDOMAIN.$data['idcard_back']); $imgarr3 = explode("/", $data['idcard_back']); $paramArray['owner_pic_opposite_name'] = $imgarr3[count($imgarr3)-1]; $paramArray['owner_opposite_md5'] = md5($paramAr3); //开户行许可照片 $params['account_permission_pic'] = IMAGEDOMAIN.$data['bankcard_front']; $paramAr4 = file_get_contents(IMAGEDOMAIN.$data['bankcard_front']); $imgarr4 = explode("/", $data['bankcard_front']); $paramArray['account_permission_pic_name'] = $imgarr4[count($imgarr4)-1]; $paramArray['account_permission_md5'] = md5($paramAr4); //图片 /*$params['owner_pic'] = IMAGEDOMAIN.$data['idcard_front'];//法人照片 是身份证照还是什么 $paramA = file_get_contents(IMAGEDOMAIN.$data['idcard_front']);//法人照片 是身份证照还是什么 $imgarr2 = explode("/", $data['idcard_front']); $paramArray['owner_pic_name'] = $imgarr2[count($imgarr2)-1]; $paramArray['owner_md5'] = md5($paramA);//法人照片 是身份证照还是什么 /*if(isset($data['weixin_code']) && !empty($data['weixin_code'])){ $business_scope = $data['weixin_code']; }elseif (isset($data['zhifubao_code']) && !empty($data['zhifubao_code'])){ $business_scope = $data['zhifubao_code']; }elseif (isset($data['qq_code']) && !empty($data['qq_code'])){ $business_scope = $data['qq_code']; }else{ return '经营类目不能为空'; }*/ $paramArray['field'] = $data['business_type'];//所属行业 $paramArray['business_scope'] = $data['business_scope'];//经营范围 n $paramArray['settle_type'] = 2;//结算类型 1 - T0,2 - T1 $paramArray['bank_license'] = $data['bank_license'];//开户许可证账号 $paramArray['settle_account_name'] = $data['settle_account_name'];//结算账号户名 $paramArray['settle_account_type'] = $data['settle_account_type'];//结算账号类型 1对公,2对私 $paramArray['settle_method'] = 0;//结算方式 0余额 1银行卡 可不传 $paramArray['agent_spid'] = '1700849288';//代理商商户号 可不传 $paramArray['settle_account'] = $data['settle_account'];//结算账号 $paramArray['settle_account_bank'] = $data['bank_name_code'];//结算账户开户行 $paramArray['bank_no'] = $data['bank_unionpay_code'];//人行支行联行号 $paramArray['settle_account_creid'] = $data['idcard'];//开户人身份证号 $paramArray['bank_province'] = $data['bank_area_code']; $paramArray['bank_city'] = $data['bank_city_code']; $paramArray['app_id'] = $data['appid']; $paramArray['appid_secret'] = 'lwm12345';//交易公众号appid_secret $paramArray['appid_dir'] = $data['directory']; //$paramArray['appid_dir'] = $data['directory']; //$paramArray['appid_dir'] = "https://wap-test.lewaimai.com/lewaimaigod/https://wap-dev.lewaimai.com/lewaimaigod/https://wap.lewaimai.com/lewaimaigod/"; $paramArray['memo'] = 'lwmbeizhu'; $fee_info = array( array( "product_type"=>"0101", "rate"=>"0.5", ), array( "product_type"=>"0102", "rate"=>"0.5", ), array( "product_type"=>"0103", "rate"=>"0.5", ), array( "product_type"=>"0201", "rate"=>"0.5", ), array( "product_type"=>"0202", "rate"=>"0.5", ), array( "product_type"=>"0203", "rate"=>"0.5", ), array( "product_type"=>"0204", "rate"=>"0.5", ), array( "product_type"=>"0205", "rate"=>"0.5", ), array( "product_type"=>"0301", "rate"=>"0.5", ), array( "product_type"=>"0302", "rate"=>"0.5", ), array( "product_type"=>"0303", "rate"=>"0.5", ), array( "product_type"=>"0401", "rate"=>"0.5", ), array( "product_type"=>"0402", "rate"=>"0.5", ), array( "product_type"=>"0601", "rate"=>"0.5", ), array( "product_type"=>"0602", "rate"=>"0.5", ), ); $fee_info_json = json_encode($fee_info); $paramArray['fee_info'] = $fee_info_json; $paramArray['business_kind'] = $data['weixin_code']; $paramArray['wechat_id'] = $data['wechat_num']; $paramArray['wechat_user_name'] = $data['wechat_user_name']; //门店照片 $params['store_pic'] = IMAGEDOMAIN.$data['business_door_c']; $paramAr5 = file_get_contents(IMAGEDOMAIN.$data['business_door_c']); $imgarr5 = explode("/", $data['business_door_c']); $paramArray['store_pic_name'] = $imgarr5[count($imgarr5)-1]; $paramArray['store_md5'] = md5($paramAr5); //收银台照片 $params['cashier_pic'] = IMAGEDOMAIN.$data['cahsier_pic']; $paramAr6 = file_get_contents(IMAGEDOMAIN.$data['cahsier_pic']); $imgarr6 = explode("/", $data['cahsier_pic']); $paramArray['cashier_pic_name'] = $imgarr6[count($imgarr6)-1]; $paramArray['cashier_md5'] = md5($paramAr6); //店内照片 $params['indoor_pic'] = IMAGEDOMAIN.$data['work_place']; $paramAr7 = file_get_contents(IMAGEDOMAIN.$data['work_place']); $imgarr7 = explode("/", $data['work_place']); $paramArray['indoor_pic_name'] = $imgarr7[count($imgarr7)-1]; $paramArray['indoor_md5'] = md5($paramAr7); $spKey = "p*Ii81AEC1"; $tianxia = new Tianxia(); $paramArray['md5_sign'] = $tianxia->getTianxiaSign($paramArray,$spKey); LewaimaiDebug::LogArray($paramArray); //$result = LewaimaiHttp::POST($tianxia->tianxai_agent_url,$paramArray); $result = $tianxia->curl_custom_postfields($tianxia->tianxia_agent_url, $paramArray, $params); LewaimaiDebug::Log($result); $result = json_encode(simplexml_load_string($result)); $retStr = trim($result,"\" \""); LewaimaiDebug::Log($retStr); $res = json_decode($retStr,true); //var_dump($res);die; return $res; /*$resultArr = json_decode($result,true); $retSign = array(); foreach ($resultArr as $k=>$v){ if($k == 'retcode' || $k == 'retmsg'){ continue; } $retSign[$k] = $v; } $resultSign = $tianxia->getTianxiaSign($retSign,$spKey); if($resultArr['$resultArr'] != $resultSign){ return '验证签名失败!'; }*/ } /*弃用了*/ public static function checkTianxiaStatus() { $connection = \Yii::app()->db; $sql = 'SELECT * from wx_tianxia_apply WHERE tx_status=1;'; $data = $connection->createCommand($sql)->queryAll(); $paramArray = array(); //$tianxia = new TianxiaregCommand(); $spKey = "p*Ii81AEC1"; $tianxia = new Tianxia(); if(!empty($data)){ foreach ($data as $k=>$v){ $paramArray['spid_second'] = $v['tianxia_id']; $paramArray['spid'] = $v['spid']; $paramArray['sign'] = $tianxia->getTianxiaSign($paramArray,$spKey); \LewaimaiDebug::LogArray($paramArray); $result = LewaimaiHttp::POST($tianxia->tianxia_check_url,$paramArray); $result = json_encode(simplexml_load_string($result)); $retStr = trim($result,"\" \""); $res = json_decode($retStr,true); \LewaimaiDebug::LogArray(121312413414); \LewaimaiDebug::LogArray($res); if(!empty($res) && isset($res['results']['root']['row']['state'])){ $tx_status = $res['results']['root']['row']['state']; if($tx_status == 2){ $sql = 'UPDATE wx_tianxia_apply SET tx_status = 2 WHERE id = '.$v['id']; $ret = $connection->createCommand($sql)->execute(); \LewaimaiDebug::LogArray('update1212:'.$ret); }elseif ($tx_status == 3){ $sql = 'UPDATE wx_tianxia_apply SET tx_status = 3 WHERE id = '.$v['id']; $ret = $connection->createCommand($sql)->execute(); \LewaimaiDebug::LogArray('update12323:'.$ret); } } } } } public static function openTianxiaBusinessStation($id) { $sql = 'select * from wx_tianxia_apply where id = :id;'; $data = Yii::app()->db->createCommand($sql)->queryRow(true,array(':id'=>$id)); if (empty($data) || $data == false) { return '系统繁忙,请重试!'; } $paramArray = array(); //$paramArray['spid_senior'] = $data['spid']; $paramArray['spid_senior'] = '1800242893'; //$paramArray['spid'] = $data['tianxia_id']; //$paramArray['spid'] = '1800619883'; //$paramArray['spid'] = '1800388369';//有返回 $paramArray['spid'] = '1800048134'; $paramArray['mail'] = "tianxiazhifu@lewaimai.com"; $paramArray['ver'] = "1.0"; $paramArray['sign_type'] = "MD5"; $spKey = "84bacea682a0d47cd54c7388bf80fc4f"; $tianxia = new Tianxia(); $queryStr = $tianxia->getParamStr($paramArray); $paramArray['sign'] = $tianxia->getTianxiaSign($paramArray,$spKey); $queryStr .= "&sign={$paramArray['sign']}"; //var_dump($queryStr);die; LewaimaiDebug::Log("企业站开通权限请求加密内容1: " . $queryStr); $publicKey = "-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCjDrkoVbyv4jTxeKtKEiK2mZie zQvfJV3sGhiwOnB+By5sa5Sa6Ls4dt5AGVqKHxyQVKRpu/utwtEt2MijWx45P1y2 xGe7oDz2hUXP0j8sSa1NP26TmWHwO7czgJxxrdJ6RNqskSfjwsa5YMsqmcrumxUI xeCg5EOkgU26bnPoZQIDAQAB -----END PUBLIC KEY-----"; $privateKey = "-----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQDQbZpCgzcGlec+HYBveOVBNOSGeiU6dfPZytzgHRMeS5rpr4oH NXeXhUb9ANM2rTInKxQbku4T9B4VNjdyVBgkh/+6ztyDZo5FqkErfvmb/ycSqH22 VRP89gFmr9oF2LubEihfcgqiOyPlQIrX1pXlgXrTpMZk6con2Xzj8N235wIDAQAB AoGAX8wgfLWmkuZPVKNmptWgOWpAJvb5KXeRTucIwhFa+i+x0fqWrF2MzB271QmO CrFsPch1A39y4cTwFrvGnEu+lCcvV6VBrePqal+mN6Em06RHzYwsRdEQDPrcc2SV XKDcu/oda9UOqSA27MEvaSrSt1AeIKOF+zG3Xrr+TMz2xaECQQDz1p5EyK8cBizv ZYl6V7DEbyr6pOfFP23eCd5g30BHOVmefLfAm0l94kIwPOwjsaNMqJhGw7edka0+ BsU3JTafAkEA2tLb4CikObxGz0ix+/FgKb4X88sXByvS8KgMvpzvXQr1tB0DGhFQ jle+Fr66+1poSm4KvX9UsS5lRbM2AFlhuQJBALGXuqX2VDNg/BFQLpUAkSpAnVj4 CiZLUEXLgj+j2jkFuBQKWfraHuikhfiEJqjIlFsc3+uKWI1WsIrge3ryi5kCQHG8 x6xrc3DO+78h+eEKRQFtXOXK2d1QWgPcVUN+Lqwd1jgYHFSgS06xLIyF9opPI4YM TGjSliLCCsF/tMHZs4ECQEg06iiqxkkyBkyLroOWn+pa9HLURoiYe5umGnlxbz5o wPEmCvMOlxKEiG8haVTznxzWdy6XLAdY4uhKcokX6K0= -----END RSA PRIVATE KEY-----"; $encode = $tianxia->rsaEncrypt($queryStr,$publicKey); //var_dump($encode);die; LewaimaiDebug::Log("企业站开通权限请求加密内容2: " . $encode); $reqParams = array('cipher_data' => $encode); $result = LewaimaiHttp::POST($tianxia->tianxia_business_station_url,$reqParams); $result = json_encode(simplexml_load_string($result)); $retStr = trim($result,"\" \""); $res = json_decode($retStr,true); \LewaimaiDebug::LogArray(121312413414); \LewaimaiDebug::LogArray($res); if($res['retcode'] == '00'){ } var_dump($result); var_dump($res); //解密 $lwmRet = $tianxia->rsaDecrypt($res['cipher_data'],$privateKey); var_dump($lwmRet);die; //var_dump($lwmRet);die; var_dump($queryStr); var_dump(date('Y-m-d H:i:s')); var_dump($result);die; } /** * Rsa加密 * @param string $content - 待加密内容 * @return string */ private function rsaEncrypt($content,$publicKey) { if (empty($publicKey)) { //Logger::error("找不到rsa公钥, path={$this->_channelConfig->publicKey}"); LewaimaiDebug::Log('找不到rsa公钥112'); return false; } $key = $publicKey; $crypto = ''; foreach (str_split($content, 117) as $chunk) { if (!openssl_public_encrypt($chunk, $encryptData, $key)) { LewaimaiDebug::Log("rsa encrypt error, " . openssl_error_string ()); return ''; } $crypto .= $encryptData; } return base64_encode($crypto); } /** * rsa解密 * @param string $encryptData - 密文 * @return bool|string */ public function rsaDecrypt($encryptData,$privateKey) { /*if (!file_exists($this->_channelConfig->privateKey)) { Logger::error("找不到rsa私钥, path={$this->_channelConfig->privateKey}"); return false; } $key = file_get_contents($this->_channelConfig->privateKey);*/ if($privateKey){ LewaimaiDebug::Log('找不到rsa私钥112'); return false; } $key = $privateKey; $crypto = ''; foreach (str_split(base64_decode($encryptData), 128) as $chunk) { if (!openssl_private_decrypt($chunk, $decryptData, $key)) { Logger::error("rsa decrypt error, " . openssl_error_string ()); return false; } $crypto .= $decryptData; } return $crypto; } //获取签名 private function getTianxiaSign($paramArray,$spKey) { if(empty($paramArray) || empty($spKey)){ return false; } ksort($paramArray); $signArr = array(); foreach ($paramArray as $k=>$v){ if (!empty($v) || $v === 0){ array_push($signArr,$k.'='.$v); } } array_push($signArr,'key'.'='.$spKey); $stringSign = implode('&',$signArr); //$stringSign .= 'key'.'='.$spKey; LewaimaiDebug::Log('tianixa sign 1:'.$stringSign); //var_dump($stringSign);die; $sign = strtolower(md5($stringSign)); //var_dump($sign);die; LewaimaiDebug::Log('tianixa sign 2:'.$sign); return $sign; } /** * 提交进件信息到天下服务器 * @Author wulingao * @DateTime 2017-10-17 * @param [type] $url [description] * @param array $assoc [description] * @param array $files [description] * @return [type] [description] */ private function curl_custom_postfields($url, array $assoc = array(), array $files = array()) { static $disallow = array("\0", "\"", "\r", "\n"); foreach ($assoc as $k => $v) { $k = str_replace($disallow, "_", $k); $body[] = implode("\r\n", array( "Content-Disposition: form-data; name=\"{$k}\"", "Content-Type: application/octet-stream;charset=UTF-8", "", filter_var($v), )); } if (!empty($files)) { foreach ($files as $k => $v) { if(strlen(file_get_contents($v)) > 260000){ //压缩图片 LewaimaiDebug::Log('filesize1:'.strlen(file_get_contents($v))); $v = $v.'!width300'; LewaimaiDebug::Log('filesize2:'.strlen(file_get_contents($v))); } $data = file_get_contents($v); $v = call_user_func("end", explode(DIRECTORY_SEPARATOR, $v)); $k = str_replace($disallow, "_", $k); $v = str_replace($disallow, "_", $v); $body[] = implode("\r\n", array( "Content-Disposition: form-data; name=\"{$k}\"; filename=\"{$v}\"", "Content-Type: application/octet-stream;charset=UTF-8", "", $data, )); } } do { $boundary = "---------------------" . md5(mt_rand() . microtime()); } while (preg_grep("/{$boundary}/", $body)); // add boundary for each parameters array_walk($body, function (&$part) use ($boundary) { $part = "--{$boundary}\r\n{$part}"; }); // add final boundary $body[] = "--{$boundary}--"; $body[] = ""; $ch1 = curl_init (); // $newLeshua = new Newleshua(); curl_setopt ( $ch1, CURLOPT_URL, $url); curl_setopt ( $ch1, CURLOPT_POST, 1 ); curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $ch1, CURLOPT_CONNECTTIMEOUT, 30 ); curl_setopt ( $ch1, CURLOPT_SSL_VERIFYPEER, FALSE ); curl_setopt ( $ch1, CURLOPT_SSL_VERIFYHOST, false ); LewaimaiDebug::Log('pass parameters to the tiaxia'); LewaimaiDebug::LogArray($body); // set options @curl_setopt_array($ch1, array( CURLOPT_POST => true, CURLOPT_POSTFIELDS => implode("\r\n", $body), CURLOPT_HTTPHEADER => array( "Expect: 100-continue", "Content-Type: multipart/form-data; boundary={$boundary}", // change Content-Type ), )); $result = curl_exec ( $ch1 ); LewaimaiDebug::Log('tianixa return time'); curl_close ( $ch1 ); return $result; } /** * 获取参数字符串 * @param array $srcParams - 请求参数 * @return string */ private function getParamStr($srcParams) { if (empty($srcParams)) { return ''; } unset($srcParams['sign']); $params = []; foreach ($srcParams as $k => $v) { if ( $v != null && $v != '') { $params[$k] = $v; } } ksort($params, SORT_STRING); $tmpParams = []; foreach ($params as $k => $v) { $tmpParams[] = "{$k}={$v}"; } $queryStr = implode("&", $tmpParams); return $queryStr; } }