leshua.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. <?php
  2. class Leshua {
  3. //测试
  4. // private $leshua_agent_id = '10';
  5. // private $leshua_agent_key = '17B10781A8C5178870197906F71749D8';
  6. // private $leshua_agent_url = 'http://61.141.235.66:61000/cgi-bin/merchantitf.cgi';
  7. //正式
  8. private $leshua_agent_id = '55765';
  9. private $leshua_agent_key = '38AF22C1EBF3884F31D741138347BFF9';//进件key
  10. private $leshua_agent_url = 'http://qudaoshang.yeahka.com/cgi-bin/merchantitf.cgi';
  11. /**
  12. * 乐刷商户导入
  13. * @param [type] $admin_id 主账号id
  14. */
  15. public static function addLeshuaMerchant($id){
  16. $leshua = new leshua();
  17. $result = $leshua->doAddLeshuaMerchant($id);
  18. return $result;
  19. }
  20. /**
  21. * 乐刷商户导入
  22. * @param [type] $admin_id 主账号id
  23. * @return array | string 成功情况下返回array,否则返回 false
  24. */
  25. private function doAddLeshuaMerchant($id){
  26. $sql = 'select * from wx_leshua_apply where id = :id;';
  27. $data = Yii::app()->db->createCommand($sql)->queryRow(true,array(':id'=>$id));
  28. if (empty($data) || $data == false) {
  29. return '系统繁忙,请重试!';
  30. }
  31. if ($data['merchant_type'] > 3 || $data['merchant_type'] < 1) {
  32. return '商户类型不正确!';
  33. }
  34. //必传参数
  35. $keyArray = array(
  36. "merchant_type","applicant","idcard","mobile","merchant_name","province_code","city_code","address","bank_name_code","bank_account_type","bank_unionpay_code","bank_branch","bank_holder","bank_account","mcc_code","mcc_type","commission_type","commission"
  37. );
  38. $imageKeyArray = array('idcard_front','idcard_back','idcard_hand','bankcard_front');
  39. switch ($data['merchant_type']) {
  40. case '2':
  41. $array = array('business_license_c');
  42. $imageKeyArray = array_merge($imageKeyArray,$array);
  43. $array = array('license','license_start','license_end');
  44. $keyArray = array_merge($keyArray,$array);
  45. break;
  46. case '3':
  47. $array = array('business_license_p');
  48. $imageKeyArray = array_merge($imageKeyArray,$array);
  49. $array = array('license','license_start','license_end');
  50. $keyArray = array_merge($keyArray,$array);
  51. break;
  52. }
  53. $imageArray = array();
  54. foreach ($imageKeyArray as $key => $value) {
  55. $imageArray[$value] = IMAGEDOMAIN.$data[$value];
  56. }
  57. $imageDataArray = $this->getImageData($imageArray);
  58. if ($imageDataArray == false) {
  59. return '获取图片信息失败,请重试!';
  60. }
  61. unset($imageArray,$imageKeyArray);
  62. $paramArray = array();
  63. foreach ($keyArray as $key => $value) {
  64. $paramArray[$value] = $data[$value];
  65. }
  66. $paramArray['user_name'] = $data['leshua_name'];
  67. $paramArray['user_pwd'] = strtoupper(md5($data['leshua_password']));
  68. unset($keyArray);
  69. $paramArray['applicant'] = trim($paramArray['applicant']);
  70. $paramArray['bank_holder'] = trim($paramArray['bank_holder']);
  71. $paramArray['agentid'] = $this->leshua_agent_id;
  72. $paramArray['t1_commission_by_weixin'] = 60;
  73. $paramArray['t1_commission_by_alipay'] = 60;
  74. $paramArray['cmd'] = 1;
  75. $paramArray['sign'] = $this->getLeshuaSign(array($this->leshua_agent_id,$data['bank_account'],$data['idcard'],$data['mobile']));
  76. $paramArray = array_merge($paramArray,$imageDataArray);
  77. //刷卡费率
  78. $feeArray = array('t1_debit_card_commission'=>'60','t1_debit_card_max_fee'=>'30000000','t1_credit_card_commission'=>'70','t1_overseas_card_commission'=>'300');
  79. $paramArray = array_merge($paramArray,$feeArray);
  80. $paramArray['commission'] = 78;
  81. Yii::log('商户参数:'.json_encode($paramArray));
  82. $result = LewaimaiHttp::POST($this->leshua_agent_url,$paramArray);
  83. Yii::log('乐刷商户导入的结果:');
  84. Yii::log($result);
  85. $result = json_decode($result,true);
  86. return $result;
  87. }
  88. /**
  89. * 检查身份证号和营业执照
  90. * @param [type] $admin_id 主账号id
  91. */
  92. public static function checkLeshuaParam($array){
  93. $leshua = new leshua();
  94. return $leshua->doCheckLeshuaParam($array);
  95. }
  96. /**
  97. * 调用乐刷提供的接口进行参数检查
  98. * @param [type] $array [description]
  99. * @return [type] [description]
  100. */
  101. private function doCheckLeshuaParam($array){
  102. $cmdArray = array('idcard'=>9,'license'=>10);
  103. foreach ($array as $key => $value) {
  104. if (empty($value)) {
  105. continue;
  106. }
  107. $paramArray = array();
  108. $paramArray['agentid'] = LESHAU_AGENT_ID;
  109. $paramArray['cmd'] = $cmdArray[$key];
  110. $paramArray[$key] = $value;
  111. $paramArray['sign'] = $this->getLeshuaSign(array($value));
  112. $result = LewaimaiHttp::POST(LESHUA_AGENT_URL,$paramArray);
  113. $result = json_decode($result,true);
  114. if ((!is_array($result)) || (!isset($result['error_code'])) || $result['error_code'] != 0) {
  115. return $result;
  116. }
  117. }
  118. return true;
  119. }
  120. /**
  121. * 修改乐刷商户基本信息
  122. * @param [type] $admin_id 主账号id
  123. */
  124. public static function editMerchantInfo($id){
  125. $sql = 'select * from wx_leshua_apply where id = :id;';
  126. $data = Yii::app()->db->createCommand($sql)->queryRow(true,array(':id'=>$id));
  127. if (empty($data) || $data == false) {
  128. return '系统繁忙,请重试!';
  129. }
  130. $leshua = new leshua();
  131. $result = $leshua->doEditMerchantBasicInfo($data);
  132. if (!is_array($result)) return $result;
  133. $result = $leshua->doEditMerchantBandInfo($data);
  134. if (!is_array($result)) return $result;
  135. return true;
  136. }
  137. /**
  138. * 修改乐刷商户基本信息
  139. * @param [type] $admin_id [description]
  140. * @return [type] [description]
  141. */
  142. private function doEditMerchantBasicInfo($data){
  143. if ($data['merchant_type'] > 3 || $data['merchant_type'] < 1) {
  144. return '商户类型不正确!';
  145. }
  146. //必传参数
  147. $keyArray = array(
  148. "merchant_type","applicant","merchant_name","province_code","city_code","address"
  149. );
  150. $paramArray = array();
  151. foreach ($keyArray as $key => $value) {
  152. $paramArray[$value] = $data[$value];
  153. }
  154. unset($keyArray);
  155. $paramArray['t1_commission_by_weixin'] = $data['weixin_commission']*10000;
  156. $paramArray['t1_commission_by_alipay'] = $data['zhifubao_commission']*10000;
  157. $paramArray['merchantid'] = $data['leshua_id'];
  158. $paramArray['agentid'] = $this->leshua_agent_id;
  159. $paramArray['cmd'] = 4;
  160. $paramArray['sign'] = $this->getLeshuaSign(array($this->leshua_agent_id,$data['leshua_id']));
  161. var_dump(json_encode($paramArray));
  162. $result = LewaimaiHttp::POST($this->leshua_agent_url,$paramArray);
  163. $result = json_decode($result,true);
  164. var_dump($result);exit;
  165. if (is_array($result) && isset($result['error_code']) && $result['error_code'] == 0 && $result['error_msg'] == '修改成功') {
  166. if (!empty($data['query_num'])) {
  167. $array = explode(',', $data['query_num']);
  168. } else {
  169. $array = array();
  170. }
  171. $array[] = $result['query_num'];
  172. $sql = 'UPDATE wx_leshua_apply set query_num = "'.implode(',',$array).'" where id = :id;';
  173. $data = Yii::app()->db->createCommand($sql)->execute(array(':id'=>$data['id']));
  174. if (!$data || $data < 1) {
  175. return '系统繁忙,导入失败,请联系技术!';
  176. }
  177. }
  178. return $result;
  179. }
  180. /**
  181. * 修改乐刷商户银行账号
  182. * @param [type] $admin_id [description]
  183. * @return [type] [description]
  184. */
  185. private function doEditMerchantBandInfo($data){
  186. //必传参数
  187. $keyArray = array(
  188. "bank_account_type","bank_unionpay_code","bank_holder","bank_account",
  189. );
  190. $imageKeyArray = array('bankcard_front');
  191. $imageArray = array();
  192. foreach ($imageKeyArray as $key => $value) {
  193. $imageArray[$value] = IMAGEDOMAIN.$data[$value];
  194. }
  195. $imageDataArray = $this->getImageData($imageArray);
  196. if ($imageDataArray == false) {
  197. return '获取图片信息失败,请重试!';
  198. }
  199. $paramArray = array();
  200. foreach ($keyArray as $key => $value) {
  201. $paramArray[$value] = $data[$value];
  202. }
  203. unset($keyArray);
  204. $paramArray['merchantid'] = $data['leshua_id'];
  205. $paramArray['agentid'] = $this->leshua_agent_id;
  206. $paramArray['cmd'] = 5;
  207. $paramArray['sign'] = $this->getLeshuaSign(array($this->leshua_agent_id,$data['leshua_id'],$data['bank_account']));
  208. $paramArray = array_merge($paramArray,$imageDataArray);
  209. $result = LewaimaiHttp::POST($this->leshua_agent_url,$paramArray);
  210. $result = json_decode($result,true);
  211. if (is_array($result) && isset($result['error_code']) && $result['error_code'] == 0 && $result['error_msg'] == '修改成功') {
  212. if (!empty($data['query_num'])) {
  213. $array = explode(',', $data['query_num']);
  214. } else {
  215. $array = array();
  216. }
  217. $array[] = $result['query_num'];
  218. $sql = 'UPDATE wx_leshua_apply set query_num = "'.implode(',',$array).'" where id = :id;';
  219. $data = Yii::app()->db->createCommand($sql)->execute(array(':id'=>$data['id']));
  220. if (!$data || $data < 1) {
  221. return '系统繁忙,导入失败,请联系技术!';
  222. }
  223. }
  224. return $result;
  225. }
  226. /**
  227. * 通过身份证获取乐刷账号id
  228. * @param [type] $idcard [description]
  229. * @return [type] [description]
  230. */
  231. public static function getMerchantIdByIdcard($idcard){
  232. $leshua = new leshua();
  233. $result = $leshua->doGetMerchantIdByIdcard($idcard);
  234. return $result;
  235. }
  236. /**
  237. * 修改乐刷商户银行账号
  238. * @param [type] $admin_id [description]
  239. * @return [type] [description]
  240. */
  241. private function doGetMerchantIdByIdcard($idcard){
  242. $paramArray = array();
  243. $paramArray['cmd'] = 8;
  244. $paramArray['agentid'] = $this->leshua_agent_id;
  245. $paramArray['idcard'] = $idcard;
  246. $paramArray['sign'] = $this->getLeshuaSign(array($idcard));
  247. $result = LewaimaiHttp::POST($this->leshua_agent_url,$paramArray);
  248. $result = json_decode($result,true);
  249. if (is_array($result) && isset($result['error_code']) && $result['error_code'] == 0 && $result['error_msg'] == '查询成功') {
  250. }
  251. return $result;
  252. }
  253. /**
  254. * 绑定乐刷pos机
  255. * @param [type] $merchantid 乐刷商户id
  256. * @param [type] $machine_sn pos机sn
  257. * @return [type] [description]
  258. */
  259. public static function bindPosMachine($merchantid, $machine_sn){
  260. $leshua = new leshua();
  261. $result = $leshua->doBindPosMachine($merchantid, $machine_sn, 1);
  262. return $result;
  263. }
  264. /**
  265. * 解除绑定乐刷pos机
  266. * @param [type] $merchantid 乐刷商户id
  267. * @param [type] $machine_sn pos机sn
  268. * @return [type] [description]
  269. */
  270. public static function unbindPosMachine($merchantid, $machine_sn){
  271. $leshua = new leshua();
  272. $result = $leshua->doBindPosMachine($merchantid, $machine_sn, 2);
  273. return $result;
  274. }
  275. /**
  276. * 绑定或者接触绑定乐刷POS机
  277. * @param [type] $merchantid 乐刷商户id
  278. * @param [type] $machine_sn pos机sn
  279. * @param [type] $type 类型,:1:增加绑定, 2:取消绑定
  280. * @return [type] [description]
  281. */
  282. private function doBindPosMachine($merchantid, $machine_sn, $type){
  283. $paramArray = array();
  284. $paramArray['cmd'] = 3;
  285. $paramArray['agentid'] = $this->leshua_agent_id;
  286. $paramArray['operate_type'] = $type;
  287. $paramArray['merchantid'] = $merchantid;
  288. $paramArray['pinpad_uuid'] = $machine_sn;
  289. $paramArray['sign'] = $this->getLeshuaSign(array($this->leshua_agent_id,$type,$merchantid,$machine_sn));
  290. $result = LewaimaiHttp::POST($this->leshua_agent_url,$paramArray);
  291. $result = json_decode($result,true);
  292. if (is_array($result) && isset($result['error_code']) && $result['error_code'] == 0 && $result['error_msg'] == '成功') {
  293. return true;
  294. }
  295. return $result['error_msg'];
  296. }
  297. /**
  298. * 获取签名信息
  299. * @param [type] $paramArray [description]
  300. * @return [type] [description]
  301. */
  302. private function getLeshuaSign($paramArray){
  303. $array = array(
  304. $this->leshua_agent_key,
  305. date('Ymd',time()),
  306. );
  307. foreach ($paramArray as $key => $value) {
  308. $array[] = $value;
  309. }
  310. $string = implode('',$array);
  311. $sign = strtoupper(md5($string));
  312. return $sign;
  313. }
  314. /**
  315. * 获取二进制图片信息
  316. * @param [type] $array [description]
  317. * @return [type] [description]
  318. */
  319. private function getImageData($array){
  320. $returnArray = array();
  321. foreach ($array as $key => $value) {
  322. $data = file_get_contents($value);
  323. if (empty($data)) {
  324. unset($returnArray);
  325. return false;
  326. }
  327. $returnArray[$key] = base64_encode($data);
  328. }
  329. return $returnArray;
  330. }
  331. }