setFee($param['real_pay_amount'])//支付金额 ->setMoney($param['pay_amount']) ->setTitle($param['title']) ->setBody($param['body']) ->setOrderNo($out_trade_no) ->setService($param['server']) ->setSignType($param['signtype']) ->setPayMethod("mobile") ->setTable($table) ->setPayWay($param['payway']) ->setGameId($param['game_id']) ->setGameName($param['game_name']) ->setGameAppid($param['game_appid']) ->setServerId(0) ->setServerName("") ->setUserId($param['user_id']) ->setAccount($user['account']) ->setUserNickName($user['nickname']) ->setPromoteId($user['promote_id']) ->setPromoteName(get_promote_name($user['promote_id'])) ->setExtend($param['extend']) ->setDiscount($param['discount']) ->setSdkVersion($param['sdk_version']); return $pay->buildRequestForm($vo); } /** * APP充值 * @param $token * @param $pay_amount 金额 * @param $good_info 商品信息(json数组:type 1平台币 2绑币 game_id 游戏ID) * @param $pay_way 1 支付宝 2微信 * author: xmy 280564871@qq.com */ public function recharge($token,$pay_amount,$good_info,$pay_way,$promote_id){ $this->auth($token); $pay_amount = (int)$pay_amount; if($pay_amount <1){ $this->set_old_message(1064,"支付金额错误"); } //$pay_amount = 0.01; $good_info = json_decode($good_info,true); switch ($good_info['type']){ case self::PLATFORM_COIN: $table = "deposit"; $prefix = "PF_"; $good['real_pay_amount'] = $pay_amount; $good['title'] = "平台币"; $good['body'] = "平台币充值"; break; case self::BIND_PLATFORM_COIN: $table = "bind_recharge"; $prefix = "BR_"; $game_id = $good_info['game_id']; $game = M("Game","tab_")->find($game_id); if(empty($game)){ $this->set_old_message(1057,"游戏不存在"); } $discount = empty($game['bind_recharge_discount']) ? 10 : $game['bind_recharge_discount']; $real_pay_amount = round($pay_amount * $discount / 10,2); //构建商品信息 $good['title'] = "绑定平台币"; $good['body'] = "绑定平台币充值"; $good['game_id'] = $game_id; $good['game_name'] = $game['game_name']; $good['game_appid'] = $game['game_appid']; $good['real_pay_amount'] = $real_pay_amount; $good['discount'] = $discount; break; default: $this->set_old_message(1055,"商品信息错误"); } $good['pay_amount'] = $pay_amount; $good['promote_id'] = $promote_id; switch ($pay_way){ case self::ALI_PAY : $this->alipay_pay(USER_ACCOUNT,$good,$table,$prefix); break; case self::WEIXIN_PAY: $this->weixin_pay(USER_ACCOUNT,$good,$table,$prefix); break; default:$this->set_old_message(1056,"暂无该支付选项"); } } /** *支付宝移动支付 */ private function alipay_pay($account,$param,$table,$prefix){ $param['apitype'] = "alipay"; $param['config'] = "alipay"; $param['signtype']= "MD5"; $param['server'] = "mobile.securitypay.pay"; $param['payway'] = 1; $param['user_id'] = get_user_id($account); $data = $this->pay($table,$prefix,$param); $md5_sign = $this->encrypt_md5(base64_encode($data['arg']),"mengchuang"); $data = array( "orderInfo" => base64_encode($data['arg']), "out_trade_no" => $data['out_trade_no'], "order_sign" => $data['sign'], "md5_sign" => $md5_sign ); $this->set_old_message(1,1,$data); } /** *微信支付 */ private function weixin_pay($account, $param, $table, $prefix) { $user_entuty = get_user_entity($account,true); $param['user_id'] = $user_entuty['id']; $param['promote_id'] = $user_entuty['promote_id']; $tool = M("tool","tab_")->where(['name'=>"wei_xin_apps"])->find(); if ($tool['status'] == 1) {//官方 if(empty(C('wei_xin_apps.email'))|| empty(C('wei_xin_apps.partner'))||empty(C('wei_xin_apps.key'))){ $this->set_message(1009, "fail", "支付参数未配置"); } $param['pay_order_number'] = $prefix . date('Ymd') . date('His') . sp_random_string(4); $param['pay_way'] = 3; $param['pay_status'] = 0; $param['spend_ip'] = get_client_ip(); $weixn = new Weixin(); $is_pay = json_decode($weixn->weixin_pay($param['title'], $param['pay_order_number'], $param['real_pay_amount'], 'APP', 3), true); if ($is_pay['status'] === 1) { switch ($table){ case 'deposit': $this->add_deposit($param); break; case "bind_recharge": $this->add_bind_recharge($param); break; } $json_data['appid'] = $is_pay['appid']; $json_data['partnerid'] = $is_pay['mch_id']; $json_data['prepayid'] = $is_pay['prepay_id']; $json_data['noncestr'] = $is_pay['noncestr']; $json_data['timestamp'] = $is_pay['time']; $json_data['package'] = "Sign=WXPay"; $json_data['sign'] = $is_pay['sign']; $json_data['status'] = 1; $json_data['return_msg'] = "下单成功"; $json_data['wxtype'] = "wx"; $this->set_old_message(1,1,$json_data); } } else { if(empty(C('wei_xin_app.partner'))||empty(C('wei_xin_app.key'))){ $this->set_message(1009, "fail", "支付参数未配置"); } $param['apitype'] = "swiftpass"; $param['config'] = array("partner" => C('wei_xin_app.partner'), "email" => C('wei_xin_app.email'), "key" => C('wei_xin_app.key')); $param['signtype'] = "MD5"; $param['server'] = "unified.trade.pay"; $param['payway'] = 3; $result_data = $this->pay($table,$prefix,$param); $data['status'] = 1; $data['wxtype'] = "wft"; $data['return_code'] = "success"; $data['return_msg'] = "下单成功"; $data['token_id'] = $result_data['token_id']; $data['out_trade_no'] = $result_data['pay_order_number']; $this->set_old_message(1,1,$data); } } public function test(){ $tool = M("tool","tab_")->where(['name'=>"wei_xin_apps"])->find(); var_dump($tool); var_dump(C('wei_xin_apps.partner')); var_dump(C('wei_xin_apps.key')); die; } /** *支付验证 */ public function pay_validation(){ #获取SDK上POST方式传过来的数据 然后base64解密 然后将json字符串转化成数组 $request = json_decode(base64_decode(file_get_contents("php://input")),true); $out_trade_no = $request['out_trade_no']; $pay_where = substr($out_trade_no,0,2); $result = 0; $map['pay_order_number'] = $out_trade_no; switch ($pay_where) { case 'SP': $data = M('spend','tab_')->field('pay_status')->where($map)->find(); $result = $data['pay_status']; break; case 'PF': $data = M('deposit','tab_')->field('pay_status')->where($map)->find(); $result = $data['pay_status']; break; case 'AG': $data = M('agent','tab_')->field('pay_status')->where($map)->find(); $result = $data['pay_status']; break; default: exit('accident order data'); break; } if($result){ echo base64_encode(json_encode(array("status"=>1,"return_code"=>"success","return_msg"=>"支付成功"))); exit(); }else{ echo base64_encode(json_encode(array("status"=>0,"return_code"=>"fail","return_msg"=>"支付失败"))); exit(); } } /** *sdk客户端显示支付 */ public function payShow(){ $map['type'] = 1; $map['status'] = 1; $data = M("tool","tab_")->where($map)->select(); if(empty($data)){ echo base64_encode(json_encode(array("status"=>0,"return_code"=>"fail","return_msg"=>"暂无数据"))); exit(); } foreach ($data as $key => $value) { $pay_show_data[$key]['mark'] = $value['name']; $pay_show_data[$key]['title'] = $value['title']; } echo base64_encode(json_encode(array("status"=>0,"return_code"=>"fail","return_msg"=>"成功","pay_show_data"=>$pay_show_data))); exit(); } }