You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
4.1 KiB
PHP

<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Common\Api;
use Org\UcenterSDK\Ucservice;
use Think\Log;
class GameApi {
public function game_login(){
}
public function game_pay_notify($param=null,$code=1,$is_uc=0, /* $isIosTest=0, */ $pay_data=0){
Log::write("notice:".serialize($param), Log::DEBUG);
/* if (!$isIosTest) { // 苹果内购 不判断订单支付成功 正常通知CP
$pay_map['pay_status'] = 1;
} */
$pay_map['pay_game_status'] = 0;
if($is_uc){
$uc=new Ucservice();
$pay_map['pay_order_number']=$param['out_trade_no'];
$pay_data=$uc->uc_spend_find($pay_map['pay_order_number']);
}else{
$pay_map['pay_order_number'] = $param['out_trade_no'];
if (!$pay_data) {
$pay_data = M("Spend","tab_")->where($pay_map)->find();
}
}
if(empty($pay_data)){
$this->error_record("游戏已通知或未找到相关数据"); return false;
}
$game = M('GameSet',"tab_");
$map['game_id'] = $pay_data['game_id'];
$game_data = $game->where($map)->find();
if(empty($game_data)){ $this->error_record("未找到指定游戏数据"); return false;}
if(empty($game_data['pay_notify_url'])){$this->error_record("未设置游戏支付通知地址"); return false;}
// 通知 抵扣的情况
if (isset($pay_data['deduction_amount']) && $pay_data['deduction_amount'] > 0) {
$pay_data['cost'] += $pay_data['deduction_amount'];
}
$pay_data['cost'] = number_format($pay_data['cost'], 2, '.', '');
$md5_sign = md5($pay_data['pay_order_number'].$pay_data['cost']."1".$pay_data['extend'].$game_data['game_key']);
$data = array(
"out_trade_no" => $pay_data['pay_order_number'],
"price" => $pay_data['cost'],
"user_id" => $pay_data['user_id'],
"pay_status" => 1,
"extend" => $pay_data['extend'],
"signType" => "MD5",
"sign" => $md5_sign
);
if (in_array($pay_data['game_id'], [7, 8, 9, 10, 11, 12, 13, 14]) && $pay_data['pay_way'] == 41) {
$game_data['pay_notify_url'] = 'http://119.45.181.187/pay/wmtxxbdhd3_callback.php';
}
Log::write("gamenotice:".serialize($game_data), Log::DEBUG);
$result = $this->post($data,$game_data['pay_notify_url']);
if($result == "success"){
$this->update_game_pay_status($pay_data['pay_order_number'],$code,$is_uc);
return 'success';
}else{
\Think\Log::record("请求参数:".serialize($data).";游戏通知地址:".$game_data['pay_notify_url']);
\Think\Log::record("游戏支付通知信息:".$result.";游戏通知地址:".$game_data['pay_notify_url']);
}
}
/**
*修改游戏支付状态
*/
private function update_game_pay_status($out_trade_no="",$code=1,$is_uc=0){
$result = false;
$map['pay_order_number'] = $out_trade_no;
$data = array("pay_game_status"=>1);
if($is_uc){
$uc=new Ucservice();
$result=$uc->uc_spend_change($out_trade_no,1);
}else{
$result = M('spend',"tab_")->where($map)->setField($data);
}
return $result;
}
public function error_record($msg=""){
\Think\Log::record($msg);
}
/**
*post提交数据
*/
protected function post($param,$url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);//设置等待时间
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
}