apiClient = new \DefaultIcbcClient( $this->APP_ID, $this->PRI_KEY, $this->signType, 'UTF-8', '', $this->APIGW_PUBLIC_KEY, '', '', '', '' ); } // 工行支付 public function pay($money="",$decive_info="111",$type="",$partner_id="",$store_type_id=""){ $user_id = $this->user_id; $merchant = 70; //商户获取金额比例 $our = 5; //服务费 $other = 3; // 其他分销推广人员费用 $user_billions = 22; // 其他+服务费 $user_msg = UserAuth::where("user_id",$user_id)->find(); $msg_id = $this->getMsgId(); // var_dump($msg_id); $out = "dlh".time().$user_id; $ip = ''; if (isset($_SERVER['HTTP_CLIENT_IP']) && $_SERVER['HTTP_CLIENT_IP'] != 'unknown') { // 判断是否有HTTP_CLIENT_IP这个请求头,存在优先使用 $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] != 'unknown') { // 判断是否有HTTP_X_FORWARDED_FOR这个请求头,存在优先使用 $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] != 'unknown') { // 获取REMOTE_ADDR这个服务器变量 $ip = $_SERVER['REMOTE_ADDR']; } $orig_date_time = date("Y-m-d\TH:i:s"); $mer_url = "https://dlh.hainings.com/index/index/localReturn"; $order_num = 3; $basic = $this->basic($user_id,$out,$money,$our,$user_msg,$type); $general1 = $this->general1($user_id,$out,$money,$other,$user_msg,$type); $general2 = $this->general2($user_id,$out,$money,$user_billions,$user_msg,$type); $userAccount = ""; $order_submit_act_input = array($basic,$general1,$general2); if($type != 0){ $userAccount = $this->userAccount($user_id,$out,$money,$merchant,$user_msg); $order_num = 4; $order_submit_act_input = array($userAccount,$basic,$general1,$general2); } $request = [ 'serviceUrl' => 'https://gw.open.icbc.com.cn/api/cardbusiness/aggregatepay/b2c/online/consumepurchase/V2', 'method' => 'POST', 'isNeedEncrypt'=>false, 'biz_content' => array( "mer_id"=>"120448160200", "ser_id"=>"120400005722", "out_trade_no"=>$out, "pay_mode"=>"9", "access_type"=>"9", "mer_prtcl_no"=>"1204481602000201", "orig_date_time"=>$orig_date_time, "decive_info"=>$decive_info, "body"=>"东龙汇", "fee_type"=>"001", "spbill_create_ip"=>$ip, "total_fee"=>strval($money*100), "mer_url"=>$mer_url, "notify_type"=>"HS", "shop_appid"=>$this->shop_appid, "icbc_appid"=>$this->APP_ID, "open_id"=>$user_msg['openid'], "expire_time"=>"300", "is_suborder"=>"1", "order_num"=>(string)$order_num, "order_submit_act_input"=>$order_submit_act_input ), 'extraParams'=>[] ]; // $res = $this->apiClient->execute($request,$msg_id,""); // print_r("
");
// var_dump($request);
$data['mer_id'] = "120448160200";
$data['ser_id'] = "120400005722";
$data['out_trade_no'] = $out;
$data['pay_mode'] = "9";
$data['access_type'] = "9";
$data['mer_prtcl_no'] = "1204481602000201";
$data['orig_date_time'] = $orig_date_time;
$data['spbill_create_ip'] = $ip;
$data['decive_info'] = $decive_info;
$data['total_fee'] = $money;
$data['fee_type'] = "001";
$data['mer_url'] = $mer_url;
$data['notify_type'] = "HS";
$data['shop_appid'] = $this->shop_appid;
$data['icbc_appid'] = $this->APP_ID;
$data['user_id'] = $user_id;
$data['classify_amt'] = $money*100;
$data['open_id'] = $user_msg['openid'];
$data['dtime'] = date("Y-m-d H:i:s");
$rest = Db::name("abutment_log")->insertGetId($data);
$res = $this->apiClient->execute($request,$msg_id,"");
$result = json_decode($res,true);
// print_r("");
// var_dump($result);
$r = json_decode($result['wx_data_package'],true);
$out_trade_no = createSn('user', 'id');
$da['order_sn'] = $out_trade_no;
$da['user_id'] = $user_id;
$da['order_amount'] = $money;
$da['partner_id'] = $partner_id;
$da['store_type_id'] = $store_type_id;
$da['alog_id'] = $rest;
$da['pay_time'] = date("Y-m-d H:i:s");
Db::name("distribution_pay")->save($da);
$r['nonceStr'] = $r['noncestr'];
$r['timeStamp'] = $r['timestamp'];
$r['paySign'] = $r['sign'];
$r['order_num'] = $order_num;
$r['alog_id'] = $rest;
return JsonServer::success('查询成功',$r);
}
public function getMsgId(){
return substr(md5("donglonghui".time().mt_rand(1,1000000)),8,13);
}
// 查询回调记录
public function checkReturn($alog_id=370,$type=""){
$abutment = Db::name("abutment_log")
->where("alog_id",$alog_id)
->where("state",0)
->find();
if($abutment == null){
return JsonServer::error('支付失败');
}
$distributionPay = Db::name("distribution_pay")
->where("alog_id",$alog_id)
->find();
if($distributionPay == null){
return JsonServer::error('支付失败');
}
$checkPay = $this->payReturnCheck($abutment['out_trade_no']);
if($checkPay['return_msg'] === "SUCCESS"){
// 解冻查询
$r = json_decode($checkPay['order_submit_act_output'],true);
$jd = $this->jiedong($r);
// var_dump($jd);
// if(!$jd){
// return JsonServer::error('解冻失败');
// }
Db::name("abutment_log")
->where("seq_no",$abutment['seq_no'])
->update(['state'=>1]);
Db::name("distribution_pay")
->where("alog_id",$alog_id)
->update(['pay_status'=>1]);
}else{
return JsonServer::error('支付失败');
}
$user = Db::name("user")
->where('id',$abutment['user_id'])
->where('disable',0)
->where('del',0)
->find();
if($user == null){
return JsonServer::error('用户不存在或被禁用');
}
if($user['first_leader'] > 0){
//获取配置比例
$config = Db::name("config")->where("type","subsidy")->select()->toArray();
$arr = array();
$earnings_pecent = $earnings_electrodeless_pecent = 0;
foreach($config as $key=>$value){
if($value['name'] == "distribution_user"){
$earnings_pecent = $value['value'];
}
if($value['name'] == "distribution_electrodeless"){
$earnings_electrodeless_pecent = $value['value'];
}
}
$earns = new Earnings();
// 推广会员用户佣金
$earnings = round($earnings_pecent*$distributionPay['order_amount']/100,2);
$distribution_user_earnings = AccountLog::distribution_user_earnings;
$earnings_result = $earns->userEarnings($earnings,$user['first_leader'],$distribution_user_earnings);
if(!$earnings_result){
return JsonServer::error('支付失败');
}
// 推广会员无极佣金
if($user['divide_state']==1){
if($user['divide_role_user_id'] > 0){
$electrodeless = round($earnings_electrodeless_pecent*$distributionPay['order_amount']/100,2);
$distribution_user_electrodeless_earnings = AccountLog::distribution_user_electrodeless_earnings;
$earnings_result = $earns->userElectrodelessEarnings($electrodeless,$user['divide_role_user_id'],$distribution_user_electrodeless_earnings);
if(!$earnings_result){
return JsonServer::error('支付失败');
}
}
}
}
// 参与消费返补
$billions = new Billions();
$order['order_amount'] = round($distributionPay['order_amount'],2);
$order['id'] = $alog_id;
$order['type'] = 5;
$type = "distribution";
$billions_result = $billions->billions($order,$abutment['user_id'],$type);
if(!$billions_result){
return JsonServer::error('支付失败');
}
return JsonServer::success('回调成功');
}
// 用户账户
public function userAccount($user_id,$out,$money,$merchant,$user_msg){
$out1 = "dlh".time().$user_id."1";
$data1['rec_num'] = "1";
$data1['seq_no'] = $out;
$data1['sub_order_id'] = $out1;
$data1['oper_flag'] = "0";
$data1['busi_type'] = "1";
$data1['sub_mer_id'] = "120448160198";
$data1['sub_mer_prtcl_no'] = "1204481601980201";
$data1['classify_amt'] = $money*$merchant;
$data1['user_id'] = $user_id;
$data1['open_id'] = $user_msg['openid'];
$data1['dtime'] = date("Y-m-d H:i:s");
$rest = Db::name("abutment_log")->save($data1);
return array(
"rec_num"=>"1",
"sub_order_id"=>$out1,
"oper_flag"=>"0",
"busi_type"=>"1",
"ori_mer_id"=>"120448160200",
"seq_no"=>$out,
"mer_acct"=>"1911025009202050845",
"ori_trx_date"=>date("Y-m-d"),
"sub_mer_id"=>"120448160198",
"sub_mer_prtcl_no"=>"1204481601980201",
"classify_amt"=>strval($money*$merchant)
);
}
// 基本户
public function basic($user_id,$out,$money,$our,$user_msg,$type){
// $out2 = "dlh17314648899792";
$out2 = "dlh".time().$user_id."2";
$data2['rec_num'] = "1";
$data2['seq_no'] = $out;
$data2['sub_order_id'] = $out2;
$data2['oper_flag'] = "0";
$data2['busi_type'] = "1";
$data2['sub_mer_id'] = "120448160201";
$data2['sub_mer_prtcl_no'] = "1204481602010201";
$data2['classify_amt'] = $money*$our;
if($type == ""){
$data2['classify_amt'] = $money*$our+$money*40;
}
$data2['user_id'] = $user_id;
$data2['open_id'] = $user_msg['openid'];
$data2['dtime'] = date("Y-m-d H:i:s");
$rest = Db::name("abutment_log")->save($data2);
return array(
"rec_num"=>"1",
"sub_order_id"=>$out2,
"oper_flag"=>"0",
"busi_type"=>"1",
"ori_mer_id"=>"120448160200",
"seq_no"=>$out,
"mer_acct"=>"1204068809100138961",
"ori_trx_date"=>date("Y-m-d"),
"sub_mer_id"=>"120448160201",
"sub_mer_prtcl_no"=>"1204481602010201",
"classify_amt"=>strval($data2['classify_amt'])
);
}
// 一般户1
public function general1($user_id,$out,$money,$other,$user_msg,$type){
// $out3 = "dlh17314648899793";
$out3 = "dlh".time().$user_id."3";
$data3['rec_num'] = "2";
$data3['seq_no'] = $out;
$data3['sub_order_id'] = $out3;
$data3['oper_flag'] = "0";
$data3['busi_type'] = "1";
$data3['sub_mer_id'] = "120448160202";
$data3['sub_mer_prtcl_no'] = "1204481602020201";
$data3['classify_amt'] = $money*$other;
if($type == ""){
$data3['classify_amt'] = $money*$other+$money*30;
}
$data3['user_id'] = $user_id;
$data3['open_id'] = $user_msg['openid'];
$data3['dtime'] = date("Y-m-d H:i:s");
$rest = Db::name("abutment_log")->save($data3);
return array(
"rec_num"=>"2",
"sub_order_id"=>$out3,
"oper_flag"=>"0",
"busi_type"=>"1",
"ori_mer_id"=>"120448160200",
"seq_no"=>$out,
"mer_acct"=>"1204064019200152507",
"ori_trx_date"=>date("Y-m-d"),
"sub_mer_id"=>"120448160202",
"sub_mer_prtcl_no"=>"1204481602020201",
"classify_amt"=>strval($data3['classify_amt'])
);
}
// 一般户2
public function general2($user_id,$out,$money,$user_billions,$user_msg){
$out4 = "dlh".time().$user_id."4";
// $out4 = "dlh17314648899794";
$data4['rec_num'] = "3";
$data4['seq_no'] = $out;
$data4['sub_order_id'] = $out4;
$data4['oper_flag'] = "0";
$data4['busi_type'] = "1";
$data4['sub_mer_id'] = "120448160203";
$data4['sub_mer_prtcl_no'] = "1204481602030201";
$data4['classify_amt'] = $money*$user_billions;
$data4['user_id'] = $user_id;
$data4['open_id'] = $user_msg['openid'];
$data4['dtime'] = date("Y-m-d H:i:s");
$rest = Db::name("abutment_log")->save($data4);
return array(
"rec_num"=>"3",
"sub_order_id"=>$out4,
"oper_flag"=>"0",
"busi_type"=>"1",
"ori_mer_id"=>"120448160200",
"seq_no"=>$out,
"mer_acct"=>"1204064419000115357",
"ori_trx_date"=>date("Y-m-d"),
"sub_mer_id"=>"120448160203",
"sub_mer_prtcl_no"=>"1204481602030201",
"classify_amt"=>strval($money*$user_billions)
);
}
// 查询是否支付成功
public function payReturnCheck($out_trade_no){
$user_id = 1;
$msg_id = $this->getMsgId();
// $out = "dlh".time().$user_id;
$request = [
'serviceUrl' => 'https://gw.open.icbc.com.cn/api/cardbusiness/aggregatepay/b2c/online/orderqry/V2',
'method' => 'POST',
'isNeedEncrypt'=>false,
'biz_content' => array(
"mer_id"=>"120448160200",
"deal_flag"=>'0',
"out_trade_no"=>$out_trade_no,
// "order_id"=>"120448160200000562407290003182",
"mer_prtcl_no"=>"1204481602000201",
"icbc_appid"=>$this->APP_ID
),
'extraParams'=>[]
];
// print_r("");
// var_dump($request);
$res = $this->apiClient->execute($request,$msg_id,"");
// var_dump($res);
$result = json_decode($res,true);
// print_r("");
// var_dump($result);
if(isset($result['order_submit_act_output'])){
return $result;
}else{
$arr['return_msg'] = "ERROR";
return $arr;
}
}
//解冻
public function jiedong($r){
foreach($r as $key=>$value){
$msg_id = $this->getMsgId();
$request = [
'serviceUrl' => 'https://gw.open.icbc.com.cn/api/mybank/mer/merin/thaw/V1',
'method' => 'POST',
'isNeedEncrypt'=>false,
'biz_content' => array(
"icbcOrderSubNo"=>$value['sub_order_seq'],
"icbcOrderNo"=>$value['order_id'],
"outAgreeNo"=>$value['sub_mer_id']."0201"
// "outAgreeNo"=>"dlh17304530429791"
// "outAgreeNo"=>"1204481602020201"
),
'extraParams'=>[]
];
// print_r("");
// var_dump($request);
$res = $this->apiClient->execute($request,$msg_id,"");
// var_dump($res);
// $result = json_decode($res,true);
$result = json_decode($res,true);
// print_r("");
// var_dump($result);
if($result['returnMsg']!="success"){
return false;
}
}
return true;
}
}