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.

488 lines
15 KiB
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace Sdk\Controller;
use Org\WeixinSDK\Weixin;
use Think\Controller;
use Org\Ipa365SDK\Ipa365;
use Mobile\Controller\SsgController;
// a8eeac3335cef5ee117d357738598f691932513b
class Ipa365Controller extends BaseController{
const signprice = 10; // 超级签价格
public $userinfo;
public function __construct() {
$this->userinfo = $_SESSION['onethink_home']['user_auth'];
parent::__construct();
}
public function test(){
$user = $this->userinfo;
pp($user);
die();
$ipa365 = new Ipa365Controller();
$result = $ipa365->pay_notify(array(
'trade_id' => "2222",
'order_id' => "SS_20190924170241aEYL"
));
pp($result);
die();
$userId = 1;
$gameId = 1;
$param['price'] = 0.01;
$param['spend_ip'] = get_client_ip();
$param['sdk_version'] = '2';
$param['user_id'] = $userId;
$param['game_id'] = $gameId;
$param['order_id'] = $orderId;
$param['apitype'] = "alipay";
$param['config'] = "alipay";
$param['signtype']= "MD5";
$param['server'] = "alipay.wap.create.direct.pay.by.user";
$param['payway'] = 1;
$param['title'] = $price;
$param['body'] = $price;
$param['callback'] = "http://www.baidu.com";
$param['notifyurl'] = "https://api.jianghuifa.cn/callback.php/Notify/sq_callback";
$ret = $this->alipay($param);
redirect($ret['url']);
die;
/* $ipa365 = new Ipa365();
$list = $ipa365->ticketList(array(
'token' => 'Ido9idMgbZlJHMQxjSgTHWZMB00PFEus',
'limit' => 1,
));
pp($list['data']['list'][0]); */
// 授予udid下载权限并获取下载地址
$ret = $ipa365->udidRequest(array(
'token' => 'Ido9idMgbZlJHMQxjSgTHWZMB00PFEus',
'udid' => 'a8eeac3335cef5ee117d357738598f691932513b',
));
pp($ret);
$ret = $ipa365->getinfo(array(
'token' => 'Ido9idMgbZlJHMQxjSgTHWZMB00PFEus',
'udid' => 'a8eeac3335cef5ee117d357738598f691932513b',
));
pp($ret);
}
public function pay_notify_test() {
die();
$this->pay_notify(array(
'order_id' => 'SS_20190924102317T2jO',
'game_id' => 1,
));
}
/**
* 订单检查
*/
public function pay_order_check() {
$orderId = I('order_id');
$order = M('game_supersign', 'tab_')->where(array(
'order_id' => $orderId
))->find();
if (!$order) {
echo "订单不存在!";
}
if ($order['pay_status'] == 1) {
redirect(U("Ipa365/install_show", [
'game_id' => $order['game_id'],
'order_id' => $order['order_id']
]));
}
echo "订单正在处理中.请稍后再试!";
exit();
}
/*
* 发起支付
*/
public function pay() {
$userId = $this->userinfo['user_id'];
if (!$userId ) {
$this->error("请登入", "/mobile.php/ssg/login");
}
$gameId = I("game_id", 0);
$price = self::signprice;
if (!$userId || !$gameId) {
$this->error("参数有误!");
}
$payLog = M('game_supersign', 'tab_')->where(array(
'user_id' => $userId,
'game_id' => $gameId
))->find();
$gameInfo = M('game', 'tab_')->field('game_name,supersign_token')->where(array(
'id' => $gameId,
))->find();
if ($payLog && $payLog['pay_status']==0) {
$orderId = $payLog['order_id'];
}elseif ($payLog && $payLog['pay_status']==1){
$orderId = $payLog['order_id'];
if(stripos($_SERVER['HTTP_HOST'], '.jianghuifa.cn') || $_SERVER['HTTP_HOST']=='127.0.0.1' || stripos($_SERVER['HTTP_HOST'], '.free.idcfengye.com')){
redirect("http://".$_SERVER['HTTP_HOST']."/sdk.php/Ipa365/install_show/user_id/$userId/game_id/$gameId/order_id/$orderId");
}else{
redirect("https://".$_SERVER['HTTP_HOST']."/sdk.php/Ipa365/install_show/user_id/$userId/game_id/$gameId/order_id/$orderId");
}
$this->error("亲~您已购买过了~请到【订单查询】查看订单信息哟~");
} else {
$orderId = "SS_" . date('Ymd') . date('His') . sp_random_string(4); // 超级签
if (!$gameInfo['supersign_token']) {
$this->error("超级签token未填写");
}
$r = M('game_supersign', 'tab_')->add(array(
'udid' => '',
'user_id' => $userId,
'game_id' => $gameId,
'order_id' => $orderId,
'pay_price' => $price,
'pay_status' => 0,
'ticket' => '', // 调用安装的时候分配
'token' => $gameInfo['supersign_token'],
'create_time' => time()
));
if (!$r) return -1;
}
$param['price'] = $price;
$param['sdk_version'] = '2';
$param['user_id'] = $userId;
$param['game_id'] = $gameId;
$param['order_id'] = $orderId;
$param['apitype'] = "alipay";
$param['config'] = "alipay";
$param['signtype']= "MD5";
$param['server'] = "alipay.wap.create.direct.pay.by.user";
$param['payway'] = 1;
$param['title'] = $price;
$param['body'] = $price;
if(stripos($_SERVER['HTTP_HOST'], '.jianghuifa.cn') || $_SERVER['HTTP_HOST']=='127.0.0.1' || stripos($_SERVER['HTTP_HOST'], '.free.idcfengye.com')){
$param['callback'] = "http://".$_SERVER['HTTP_HOST']."/sdk.php/Ipa365/install_show/user_id/{$userId}/game_id/{$gameId}/order_id/{$orderId}";
$param['notifyurl'] = "http://".$_SERVER['HTTP_HOST']."/callback.php/Notify/notify/apitype/alipay";
}else{
$param['callback'] = "https://".$_SERVER['HTTP_HOST']."/sdk.php/Ipa365/install_show/user_id/{$userId}/game_id/{$gameId}/order_id/{$orderId}";
$param['notifyurl'] = "https://".$_SERVER['HTTP_HOST']."/callback.php/Notify/notify/apitype/alipay";
}
$ret = $this->alipay($param);
$this->assign("url", $ret['url']);
$weixn = new Weixin();
$wx_pay = json_decode($weixn->weixin_pay('超级签消费', $orderId, $price, 'MWEB', 4), true);
$this->assign("wxurl", $wx_pay['mweb_url']);
$this->assign("price", self::signprice);
$this->assign("order_id", $orderId);
$this->assign("game_name",$gameInfo['game_name']);
$this->assign("callback",$param['callback']);
$this->display();
}
// 微信分享页面
public function paytip(){
$userId = $this->userinfo['user_id'];
if (!$userId ) {
$this->error("请登入", "/mobile.php/ssg/login");
}
$orderId = I('order_id');
$payLog = M('game_supersign', 'tab_')->where(array(
'order_id' => $orderId,
))->find();
$this->assign('url', U('Ipa365/install', array(
'order_id' => $payLog['order_id'],
'user_id' => $payLog['user_id'],
'game_id' => $payLog['game_id'],
)));
$price = $payLog['pay_price'];
$userId = $payLog['user_id'];
$gameId = $payLog['game_id'];
$param['price'] = $price;
$param['sdk_version'] = '2';
$param['user_id'] = $userId;
$param['game_id'] = $gameId;
$param['order_id'] = $orderId;
$param['apitype'] = "alipay";
$param['config'] = "alipay";
$param['signtype']= "MD5";
$param['server'] = "alipay.wap.create.direct.pay.by.user";
$param['payway'] = 1;
$param['title'] = $price;
$param['body'] = $price;
$param['callback'] = "https://".$_SERVER['HTTP_HOST']."/sdk.php/Ipa365/install_show/user_id/{$userId}/game_id/{$gameId}/order_id/{$orderId}";
$param['notifyurl'] = "https://".$_SERVER['HTTP_HOST']."/callback.php/Notify/notify/apitype/alipay";
$ret = $this->alipay($param);
$this->assign("url", $ret['url']);
$weixn = new Weixin();
$wx_pay = json_decode($weixn->weixin_pay('超级签消费', $orderId, $price, 'MWEB', 4), true);
$this->assign("wxurl", $wx_pay['mweb_url']);
$this->assign("price", $price);
$this->assign("order_id", $payLog['order_id']);
$this->assign("game_id", $payLog['game_id']);
//$this->assign("jump_url",$jump_url);
$this->display();
}
/**
* 下载页面 判断订单是否支付成功
*/
public function install_show() {
$orderId = I('order_id', 0);
$gameId = I('game_id', 0);
/* $userId = I('user_id', 0);
$user = M('user', 'tab_')->where(array(
'id' => $userId
))->find(); */
$userId = $this->userinfo['user_id'];
if (!$userId ) {
$this->error("请登入", "/mobile.php/ssg/login");
}
// $userId = $_SESSION['user_id'];
if (!$userId ) {
$this->error("请登入", "/mobile.php/ssg/login");
}
if (!$orderId || !$gameId || !$userId) {
$this->error("参数校验失败,请重试");
}
$supersign = M('game_supersign', 'tab_')->where(array('order_id' => $orderId,"game_id"=>$gameId))->find();
if (!$supersign) {
$this->error("订单不存在");
}
if ($supersign['pay_status'] != 1) {
$this->error("订单未支付");
}
$game = M('game', 'tab_')->where(array('id' => $gameId))->find();
$this->assign('game', $game);
$this->assign('url', U('Ipa365/install', array(
'order_id' => $orderId,
'user_id' => $userId,
'game_id' => $gameId
)));
//获取礼包码
$giftbag = M('giftbag', 'tab_')->field("*")->where(array("game_id"=>$gameId,"giftbag_version"=>3))->find();
if(empty($giftbag)){
$giftbag = false;
}else{
$desribe = $giftbag['desribe'];
$mygif = $this->checkAccountGiftExist($userId,$giftbag['id']);
if(!empty($mygif)){
//已经领取
$giftbag =$mygif;
}else{
if($giftbag['novice_num']>0){
//领取
$giftbag = $this->getNovice($userId,$this->userinfo['account'],$giftbag['id']);
}
}
$giftbag['desribe'] = $desribe;
}
//验证是否领取
$this->assign('giftbag', $giftbag);
$this->display();
}
/**
* 获取用户安装历史url
*/
public function get_install_list() {
/* $gameId = I('game_id', 0);
$where = array(
'pay_status' => 1,
'ticket' => array('neq', '')
);
if ($id) $where['game_id'] = $gameId;
$list = M('game_supersign', 'tab_')->where($where)->select();
// pp($list);
$url = $game['supersign_url']."?code={$code}";
pp($url);
redirect($url); */
}
/**
* 用户点击安装
*/
public function install() {
$userId = $this->userinfo['user_id'];
if (!$userId ) {
$this->error("请登入", "/mobile.php/ssg/login");
}
$gameId = I('game_id', 0);
$orderId = I('order_id', 0);
if (!$userId || !$gameId || !$orderId) {
$this->error("参数有误!");
}
M()->startTrans();
// 获取支付记录
$gamesign = M('game_supersign', 'tab_')->where(array(
'order_id' => $orderId,
'user_id' => $userId,
'game_id' => $gameId,
'pay_status' => 1,
))->find();
if (!$gamesign) {
// pp(M('game_supersign', 'tab_')->_sql());
$this->error("支付记录不存在");
}
if ($gamesign['url']) {
redirect($gamesign['url']);
}
$token = $gamesign['token'];
$ipa365 = new Ipa365();
$i = 1;
while (1) {
// 获取授权码
$list = $ipa365->ticketList(array(
'token' => $token,
'limit' => $i,
)); // @todo: 并发授权码已分配的情况
$code = $list['data']['list'][$i-1]['code'];
$codeExists = M('game_supersign', 'tab_')->field('id')->where(array(
'ticket' => $code,
))->find();
if (!$codeExists) {
break;
}
$i ++;
}
$game = M('game', 'tab_')->where(array(
'id' => $gameId,
))->find();
$url = $game['supersign_url']."?code={$code}";
$r = M('game_supersign', 'tab_')->where(array(
'user_id' => $userId,
'game_id' => $gameId,
'pay_status' => 1
))->save(array(
'ticket' => $code, // 调用安装的时候分配
'url' => $url,
));
if (!$r) {
pp(M('game_supersign', 'tab_')->_sql());
M()->rollback();
return -1;
}
M()->commit();
// 调用第三方连接
// pp($url);
redirect($url);
}
/*
* 打包列表
*/
public function pay_list() {
$userId = $this->userinfo['user_id'];
if (!$userId ) {
$this->error("请登入", "/mobile.php/ssg/login");
}
$list = M('game_supersion', 'tab_')->where(array(
'user_id' => $userId,
))->select();
$this->assign("list", $list);
$this->display();
}
// alipay
public function alipay($param) {
$pay = new \Think\Pay($param['apitype'],C($param['config']));
$vo = new \Think\Pay\PayVo();
$vo->setBody("超级签消费")
->setFee($param['price'])//支付金额
->setTitle($param['title'])
->setOrderNo($param['order_id'])
->setService($param['server'])
->setSignType($param['signtype'])
->setPayMethod("wap")
->setTable("supersign")
->setPayWay($param['payway'])
->setCallback($param['callback'])
->setNotifyUrl($param['notifyurl'])
->setGameName(get_game_name($param['game_id']))
->setServerId(0)
->setUserId($param['user_id'])
->setSdkVersion($param['sdk_version']);
$pay_['url']= $pay->buildRequestForm($vo);
//$pay_['out_trade_no']= $out_trade_no;
return $pay_;
}
//领取礼包码
public function getNovice($user_id,$account,$gift_id){
$data =M("giftbag",'tab_')->find($gift_id);
$novice_str = $data['novice'];
$novice_arr = str2arr($novice_str,",");
if (empty($novice_arr)){
return "";
}
$novice_arr = array_filter($novice_arr);
$novice = array_pop($novice_arr);
$data['novice_num'] = count($novice_arr);
$data['novice'] = arr2str($novice_arr,",");
M("giftbag",'tab_')->startTrans();
$novice_result = M("giftbag",'tab_')->save($data);
if(!empty($novice)){
//记录领取
$record['game_id'] = $data['game_id'];
$record['game_name'] = $data['game_name'];//get_game_name($data['game_id']);
$record['gift_id'] = $gift_id;
$record['gift_name'] = $data['giftbag_name'];
$record['status'] = 0;
$record['novice'] = $novice;
$record['user_id'] = $user_id;
$record['user_account'] = $account;
$record['create_time'] = time();
$record['start_time'] = $data['start_time'];
$record['end_time'] = $data['end_time'];
$record_result = M("gift_record",'tab_')->add($record);
}else{
$novice_result = false;
}
if($novice_result === false || $record_result === false){
M("giftbag",'tab_')->rollback();
return "";
}else{
M("giftbag",'tab_')->commit();
return $record;
}
}
public function checkAccountGiftExist($user_id,$gift_id){
$map['user_id'] = $user_id;
$map['gift_id'] = $gift_id;
return M("gift_record",'tab_')->field('*')->where($map)->find();
}
}