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.

1214 lines
48 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 Think\Controller;
use Common\Api\GameApi;
use Org\WeixinSDK\Weixin;
use Org\HeepaySDK\Heepay;
use Org\UcenterSDK\Ucservice;
use Org\SwiftpassSDK\Swiftpass;
use Org\JtpaySDK\Jtpay;
use Org\GoldPig\GoldPig;
use Org\SqpaySDK\Sqpay;
use Qiniu\json_decode;
use Think\Log;
class WapPayController extends BaseController{
private function pay($param=array()){
$table = $param['code'] == 1 ? "spend" : "deposit";
$user = get_user_entity($param['user_id']);
switch ($param['apitype']) {
case 'swiftpass':
$pay = new \Think\Pay($param['apitype'],$param['config']);
break;
default:
$pay = new \Think\Pay($param['apitype'],C($param['config']));
break;
}
$discount = $this->get_discount($param['game_id'],$user['promote_id'],$param['user_id']);
$discount = $discount['discount'];
$vo = new \Think\Pay\PayVo();
$vo->setBody("充值记录描述")
->setFee($param['price'])//支付金额
->setTitle($param['title'])
->setBody($param['body'])
->setOrderNo($param['out_trade_no'])
->setRatio(get_game_selle_ratio($param["game_id"]))
->setService($param['server'])
->setSignType($param['signtype'])
->setPayMethod("wap")
->setTable($table)
->setPayWay($param['payway'])
->setGameId($param['game_id'])
->setGameName(get_game_name($param['game_id']))
->setGameAppid($param['game_appid'])
->setServerId($param['server_id'])
->setGamePlayerId($param['game_player_id'])
->setGameplayerName($param['game_player_name'])
->setServerName($param['server_name'])
->setUserId($param['user_id'])
->setAccount($user['account'])
->setUserNickName($user['nickname'])
->setPromoteId($user['promote_id'])
->setPromoteName($user['promote_account'])
->setExtend($param['extend'])
->setSdkVersion($param['sdk_version'])
->setDiscount($discount)
->setSmallId($param['small_user_id'])
->setSmallAccount(get_user_account_by_id($param['small_user_id']));
return $pay->buildRequestForm($vo, 0, $param);
}
/**
*支付宝移动支付
*/
public function alipay_pay(){
$request = json_decode(base64_decode(file_get_contents("php://input")),true);
// 支付验证 是否让支付
$payCheck = pay_check($request['user_id']);
if (!$payCheck['code']) {
$this->set_message(1088, "fail", $payCheck['msg']);
}
file_put_contents(dirname(__FILE__) . '/alipay_paywap.txt',json_encode($request));
C(api('Config/lists'));
/* $payconfig = ['alipay' => [
'partner' => '2088631242187552',
'key' => '2yxhpzhxnkeji5yldvow2wr8xdib6tl8',
'email' => '65517558@qq.com',
'appid' => '2019091067222198',
'way' => '0',
'usenew' => '0',
'status' => '1'
]];
C($payconfig); */
if (empty($request)) {
$this->set_message(1001, "fail", "登录数据不能为空");
}
$game = M('Game','tab_')->where(['id'=>$request['game_id']])->field('pay_status')->find();
if($game['pay_status'] == 0){
$this->set_message(0,"fail","该游戏暂时无法充值,请联系客服!");
}
if($request['code'] == 1){
$extend_data = M('spend','tab_')->where(array('extend'=>$request['extend'],/* 'pay_status'=>1, */'game_id'=>$request['game_id']))->find();
if($extend_data){
$this->set_message(1089,"fail","订单号重复,请关闭支付页面重新支付");
}
}
if($request['price']*1<=0){
$this->set_message(1011,"fail","充值金额有误");
}
$prefix = $request['code'] == 1 ? "SP_" : "PF_";
$out_trade_no = $prefix.date('Ymd').date('His').sp_random_string(4);
// $request = $this->other_price($request);
//Log::write(serialize($request), Log::DEBUG);
if(get_zfb_type()==0 || 1){ // 旧版走web支付
$game_set_data = get_game_set_info($request['game_id']);
$request['apitype'] = "alipay";
$request['config'] = "alipay";
$request['signtype']= "MD5";
$request['server'] = "alipay.wap.create.direct.pay.by.user";
$request['payway'] = 1;
$request['title']=$request['price'];
$request['body']=$request['price'];
$request['out_trade_no'] = $out_trade_no;
//$this->set_message(1011,"fail", $request['code']);
$pay_url=$this->pay($request);
$data = array(
'status' => 200,
"out_trade_no" => $out_trade_no,
"url" => $pay_url,
);
} elseif (get_zfb_type() == 2) { // 双乾支付H5
$request['pay_order_number'] = $out_trade_no;
$request['pay_way'] = C('PAY_WAY.SQ_ALIPAY');
$request['pay_status'] = 0;
$request['spend_ip'] = get_client_ip();
if($request['code']==1){
$this->add_spend($request,1);
}else{
$this->add_deposit($request);
}
$sqpay=new Sqpay();
$returl = C('PAY_DOMAIN'). "/sdk.php/Spend/pay_success/orderno/".$request['pay_order_number'].'/game_id/'.$request['game_id'];
$data['secret'] = C("sqpay.key");
$data['merno'] = C("sqpay.partner");
$data['amount'] = $request['price'];
$data['order_no'] = $request['pay_order_number'];
$data['paymenttype'] = "ZFBZF";
$data['MerRemark'] = "mark";
$data['subject'] = "消费-".$request["pay_order_number"];
$data['notifyurl'] = C('PAY_DOMAIN')."/callback.php/Notify/sq_callback";//通知
$data['returnurl'] = $returl;
$data['mchAppId'] = "hexidongkeji.top";
$data['mchAppName'] = "mchAppName";
$data['deviceInfo'] = "AND_WAP";
$data['clientIp'] = get_client_ip();
$ret = $sqpay->sq_pay($data);
$ret = json_decode($ret, true);
unset($data);
if($ret[0]['respCode'] == '000000'){
$data = array(
"status" => 200,
"out_trade_no" => $out_trade_no,
"url" => $ret[0]['payURL'],
);
}else{
$data = array(
"status" => 0,
"out_trade_no" => $out_trade_no,
"url" => $ret['respMess'],
);
}
}
else{
if( empty(C('goldpig.partner'))||empty(C('goldpig.wooolid'))){
$this->set_message(1009, "fail", "支付参数未配置");
}
if($request['price']*1<1){
$this->set_message(1011,"fail","单笔交易金额必须大于1元");
}
$request['pay_way'] = 8;
$request['pay_status'] = 0;
$request['pay_order_number'] = $out_trade_no;
$request['spend_ip'] = get_client_ip();
//折扣
$user = get_user_entity($request['user_id']);
$discount = $this->get_discount($request['game_id'],$user['promote_id'],$request['user_id']);
$discount = $discount['discount'];
$pay_amount = $discount * $request['price'] / 10;
if($request['code']==1){
$this->add_spend($request);
}else{
$this->add_deposit($request);
}
$goldpig=new GoldPig();
$pay_url = $goldpig->GoldPig($user['account'],$pay_amount,15,$request['pay_order_number']);
if($pay_url['status']==0){
$url='http://'.$_SERVER['HTTP_HOST'];
$data = array(
'status' => 0,
"out_trade_no" => $out_trade_no,
"url" => $pay_url['info'],
);
}else{
$data = array(
'status' => 200,
"out_trade_no" => $out_trade_no,
"url" => $pay_url['msg'],
);
}
}
echo base64_encode(json_encode($data));
}
// 签约处理
public function sign_contract() {
$sqpay = new Sqpay();
$param = I("request.");
// $param['signCode'] = 357926;
// pp($param);
if (IS_POST && !$param['signCode']) {
//echo "调用认证 签约==》".time()."<br>"; 发送短信
$rsign = $sqpay->sign_contract(array(
'merNo' => C('sqpay.partner'),
'custName' => $param['custName'],
'phoneNo' => $param['phoneNo'],
'cardNo' => $param['cardNo'],
'idNo' => $param['idNo'],
'reqMsgId' => date('YmdHis').rand(0, 9999),
'authMsg' => '',
'custType' => '01', // 认证 发短信
'secret' => C('sqpay.key'),
));
//echo "调用认证 签约==》".time()."<br>";
if ($rsign['respCode'] == 'success') { // 认证成功发送短信
$this->success('签约短信发送成功', '', true);
} else {
if (strlen($rsign['respMessage']) > 100) {
$this->error('填写信息有误,请核对!', '', true);
} else {
$this->error($rsign['respMessage'], '', true);
}
}
// var_dump($rsign);
exit();
}
if (IS_POST && $param['signCode']) {
$rauth = $sqpay->sign_contract(array(
'merNo' => C('sqpay.partner'),
'custName' => $param['custName'],
'phoneNo' => $param['phoneNo'],
'cardNo' => $param['cardNo'],
'idNo' => $param['idNo'],
'reqMsgId' => date('YmdHis').rand(0, 9999),
'authMsg' => $param['signCode'],
'custType' => '02', // 签约
'secret' => C('sqpay.key'),
));
if ($rauth['respCode'] == 'success') { // 签约成功
$this->success('签约成功', '', true);
$signContract = true;
} else {
$this->error($rauth['respMessage'], '', true);
}
}
}
/**\
* 快捷支付'merNo' => $data['merNo'],
'merOrderNo' => $data['merOrderNo'],
'cardNo' => $data['cardNo'],
'custName' => $data['custName'],
'idType' => '0',
'idNo' => $data['idNo'],
'phone' => $data['phoneNo'],
'purpose' => $data['purpose'],
'payAmount' => $data['payAmount'],
'bankCode' => $bankInfo['bank'],
'payType' => 'XYPAY',
'NotifyURL' => $data['NotifyURL'],
'txnTime' => $data['txnTime'],
'smsCode' => $data['smsCode'],
*/
public function shortcut_pay() {
$sqpay = new Sqpay();
$param = I("request.");
$signContract = false; // 签约标记
if (!$param['user_id'] || !$param['game_id']) {
$this->error("参数有误", '', true);
}
// 支付验证 是否让支付
$payCheck = pay_check($param['user_id']);
if (!$payCheck['code']) {
$this->set_message(1088, "fail", $payCheck['msg']);
}
$payInfo = M('pay_info', 'tab_')->where(array(
'user_id' => $param['user_id'],
'game_id' => $param['game_id'],
'extend' => $param['extend']
))->order('id desc')->find();
// $info = json_decode($payInfo['info'], true);
if ($payInfo['type'] == 'sq_shortcut') {
$spend = M('spend', 'tab_')->where([
'pay_order_number' => $payInfo['order_id']
])->find();
$orderPrice = $spend['pay_amount'];
} else {
$deposit = M('deposit', 'tab_')->where([
'pay_order_number' => $payInfo['order_id']
])->find();
$orderPrice = $deposit['pay_amount'];
}
if ($orderPrice != $payInfo['price']) {
$this->error($orderPrice."数据有误.".$payInfo['price'], '', true);
}
if ($payInfo['type'] == 'sq_shortcut_platform' && $payInfo['price'] < 1) {
$this->error("数据有误", '', true);
}
if ($payInfo['status'] == 'payed') {
$this->error("订单已支付");
}
// 发起支付
if (IS_POST && $param['smsCode']) {
//echo "发起支付==》".time()."<br>";
$rsp = $sqpay->shortcut_pay(array(
'merNo' => C('sqpay.partner'),
'merOrderNo' => $payInfo['order_id'],
'custName' => $param['custName'],
'phoneNo' => $param['phoneNo'],
'cardNo' => $param['cardNo'],
'idNo' => $param['idNo'],
'purpose' => 'purpose',
'payAmount' => $payInfo['price'],
'txnTime' => $payInfo['txnTime'],
'smsCode' => $param['smsCode'],
'secret' => C('sqpay.key'),
'NotifyURL' => C('PAY_DOMAIN')."/callback.php/Notify/sq_callback",//通知
));
//echo "发起支付==》".time()."<br>";
if ($rsp['responseCode'] == '88') {
// sleep(5);
echo json_encode([
'status' => 1,
'info' => '请求成功',
'url' => U('Spend/shortcut_notice',array('status'=> 1, 'orderno' => $payInfo['order_id'], 'user_id'=>$param['user_id'],'game_id'=>$param['game_id'])),
]);
exit();
// redirect(U('Spend/shortcut_notice',array('status'=> 1, 'orderno' => $payInfo['order_id'], 'user_id'=>$param['user_id'],'game_id'=>$param['game_id'])));exit;
} else {
// 支付失败
echo json_encode([
'status' => 0,
'info' => $rsp['resMess']
]);
exit();
// redirect(U('Spend/pay_success',array('status'=> 0, 'orderno' => $payInfo['order_id'], 'user_id'=>$param['user_id'],'game_id'=>$param['game_id'])));exit;
}
}
// 发送短信
if (IS_POST && !isset($param['smsCode'])) {
// 查看是否签约
//echo "查看是否签约==》".time()."<br>";
$rcs = $sqpay->contract_status(array(
'merNo' => C('sqpay.partner'),
'custName' => $param['custName'],
'phoneNo' => $param['phoneNo'],
'cardNo' => $param['cardNo'],
'idNo' => $param['idNo'],
'payAmount' => $payInfo['price'],
'secret' => C('sqpay.key'),
));
// pp($rcs);
//echo "查看是否签约==》".time()."<br>";
if ($rcs['respCode'] == 4) {
$this->error($rcs['respMessage'], '', true);
pp($rcs);
pp($rcs['respMessage']);
}
if ($rcs['respCode'] == 1 || $rcs['respCode'] == 2 || $rcs['respCode'] == 3) {
echo json_encode([
'status' => 2, //
'info' => '未签约'
]);
exit();
}
/* // 调用认证 签约 6222031402001028203 500236199608024075
if ($rcs['respCode'] == 1 || $rcs['respCode'] == 2 || $rcs['respCode'] == 3) {
//echo "调用认证 签约==》".time()."<br>"; 发送短信
$rsign = $sqpay->sign_contract(array(
'merNo' => C('sqpay.partner'),
'custName' => $param['custName'],
'phoneNo' => $param['phoneNo'],
'cardNo' => $param['cardNo'],
'idNo' => $param['idNo'],
'reqMsgId' => date('YmdHis').rand(0, 9999),
'authMsg' => 'ok',
'custType' => '01',
'secret' => C('sqpay.key'),
));
//echo "调用认证 签约==》".time()."<br>";
if ($rsign['respCode'] == 'success') { // 认证成功 接着签约
$rauth = $sqpay->sign_contract(array(
'merNo' => C('sqpay.partner'),
'custName' => $param['custName'],
'phoneNo' => $param['phoneNo'],
'cardNo' => $param['cardNo'],
'idNo' => $param['idNo'],
'reqMsgId' => date('YmdHis').rand(0, 9999),
'authMsg' => $rsign['authMsg'],
'custType' => '02',
'secret' => C('sqpay.key'),
));
pp($rauth);
if ($rauth['respCode'] == 'success') {
$signContract = true;
} else {
$this->error($rauth['respMessage'], '', true);
}
} else {
$this->error($r['respMessage'], '', true);
}
}*/
// 无需签约 发送短信
if ($rcs['respCode'] == 0 || $rcs['respCode'] == 10) {
//echo "发送短信==》".time()."<br>";
$ret = $sqpay->protocol_pay_send_sms(array(
'merNo' => C('sqpay.partner'),
'custName' => $param['custName'],
'phoneNo' => $param['phoneNo'],
'cardNo' => $param['cardNo'],//'6214855913999401',
'idNo' => $param['idNo'],
'payAmount' => $payInfo['price'],
'secret' => C('sqpay.key'),
'merOrderNo' => $payInfo['order_id'],
'NotifyURL' => C("PAY_DOMAIN")."/callback.php?Notify/sq_callback",
'purpose' => "消费-".$payInfo['order_id'],
));
//echo "发送短信==》".time()."<br>";
if ($ret['resFlag'] == 'success') {
M('pay_info', 'tab_')->where(array(
'id' => $payInfo['id'],
))->save(array(
'txn_time' => $ret['txnTime']
));
$this->success('发送成功', '', true);
} else {
$this->error($ret['resMess'], '', true);
}
}
}
$this->display();
}
/**
* 测试
*/
public function test() {
var_dump(C('sqpay'));
die('aaa');
$sqpay = new Sqpay();
$r = $sqpay->contract_status(array(
'merNo' => 204121,
'custName' => '张谷城',
'phoneNo' => '18950494552',
'cardNo' => '6225768783753476',
'idNo' => '352228199110130536',
'payAmount' => 0.01,
'secret' => 'NsyJOE!e',
));
if ($r['respCode'] == 4) {
pp($r);
pp($r['respMessage']);
}
// 调用签约
if ($r['respCode'] == 1 || $r['respCode'] == 2 || $r['respCode'] == 3) {
}
// 无需签约 发送短信
if ($r['respCode'] == 0 || $r['respCode'] == 10) {
$sqpay->protocol_pay_send_sms(array(
'merNo' => 204121,
'custName' => '张谷城',
'phoneNo' => '18950494552',
'cardNo' => '6225768783753476',//'6214855913999401',
'idNo' => '352228199110130536',
'payAmount' => 0.01,
'secret' => 'NsyJOE!e',
'merOrderNo' => 'SP_dfjlasjd1',
'NotifyURL' => 'www.baidu.com',
'purpose' => 'aaaa'
));
}
pp($r);
$url = "https://ccdcapi.alipay.com/validateAndCacheCardInfo.json";
$data['cardNo'] = "6225768783753476";
$r = curl_post($url, array('cardNo' => $data['cardNo'], 'cardBinCheck' => 'true', '_input_charset' => 'utf-8'));
$r = (json_decode($r, true));
pp($r['bank']);
$sqpay = new Sqpay();
$order_no = "232323";
$ret = $sqpay->sq_wxsmallpay($order_no);
pp(json_decode($ret[0]['wxjsapiStr']));
$request = json_decode(think_decrypt("MDAwMDAwMDAwMJndsKKZZYuXeqCgy324cpebidDdi6mplZy2vKCFdqeagKewp5CKas6JaJ3Nec6fnYSJtt96ztqbmbq0mpyJr5qDza-wgJywy4tod9aKummcmn2n1YuorGiBzKdoipyzqIG4q2mJnX6Xfnp3poKogayAntzOkr2xmJGVsKCRirSdjJafspF6j9uTpIfWirx5nYaert16ztqbm5S8rZyfuKqMlpuhmYqOy4Cfest8p3plmme73omXz52BzNWdh3ajmoCnsLOReq3IlaOH25OWnKqZnq6bes-sm4SlsGSZirSkjrevb4Cgh9iTiWaWkbuUZZpnt9d907VjmqmfqZJkrJmWlrihmWRyxZWKi81-q3qXm4nNzoupuZWctsCghazKlJi4v7KEepLRiX6Gln3RiWmPfbqXf9_PnJCqu2eFnLNlf7evrICgh9iLfYbLf815rICe3M6Ura2ikZS7nYeco6aBqKusgKCDkpOjf9iSq2mtgJ_Uzn7PqZuFubydgZvZmpeWtKiRimrOeqCgy5SsmKuZfKuVi9Kcq5q6tJ-Zq6ukfdHKoZmKj8iUfanKlbuGrY9nms2TvLibh8uvnYR1rKWOqLyfmmWl0JOfeph5znKehYyymn-8vKuGps6chYbOnY6otKWEoIvNfoqU2n3Odp6Eebaafs-0Y4HL3Z2SisphjrubpICdqMuUaIfblNGGrYqMtp5-mNtjm5S8rYuJs2qBuKexhIuG3JR6itl_qJtmnX2n3pOXtWORlbh-knaSqYHOq2qFnaCVfop6lX7OhZ2DeK_NipexqJy5m2SBnNGamKu8s5t3etl-iXrVedGUnJmMu8uT0qmmkrWvaoGe2mKC0bdpkJ-xk4B9e81-uqhlhaK634Cr22OGzK-rkpvKlJi4zbKRnaXFlYqKlX-7fpebicjef6nKooHL3Z2ZiZurjJfApZqhh9KTaGXLf815rIOfptp-qKylgdConJ2Im6eX0bilmp9y15WNYsuKvHmdhp6vuYarm6uFpqtphXbNqYLeq2yErYKSf4x6k5KqeZ2DeK_cir3PmJuVuJycerirfc7VsIN2g9mKjp3IlJZ2aYCf1Jh9qK2sm6m8qZJ4m6GXp69vgJ1-236JZdt9qIGphK-62n65yquB0JZx"),true);
pp($request);
$pay['agent_id'] = "2083328";//商户号
$pay['order_no'] = "SP_111111002";
$pay['time'] = date('YmdHis', time());
$pay['pay_type'] = 30;
$pay['amount'] = 0.01;
$pay['user_ip'] = get_client_ip();
$pay['sign_key'] = "852B4A10455E49F280EEFCB1";//密钥
$pay['payerName'] = "yb";
$pay['number'] = 1;
$pay['payerName'] = "sp";
$pay['goods_name'] = "cs";
$pay['goods_note']="cs";
$pay['device'] = "wap";
$pay['remark'] = "ios";
$pay['bank_card_type'] = 0;
$pay['return_url'] ='http://' . $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success/orderno/".$pay['order_no'].'/game_id/'.$_REQUEST['game_id'];
$heepay = new Heepay();
$token_id = $heepay->wxh5_pay($pay);
pp($token_id);
}
/**
* android获取 支付url
*/
public function android_shortcut_pay() {
$request = json_decode(base64_decode(file_get_contents("php://input")), true);
file_put_contents("./Application/Sdk/OrderNo/".$request['user_id']."-".$request['game_id'].".txt",think_encrypt(json_encode($request)));
$this->set_message(1088, "fail", "暂不支持此方式充值");
// 支付验证 是否让支付
$payCheck = pay_check($request['user_id']);
if (!$payCheck['code']) {
$this->set_message(1088, "fail", $payCheck['msg']);
}
$user_id = $request['user_id'];
$game_id = $request['game_id'];
$data = array(
'status' => 200,
"url" => 'http://' . $_SERVER ['HTTP_HOST'] ."/sdk.php/WapPay/wap_shortcut_pay/user_id/{$user_id}/game_id/{$game_id}",
"html" => '',
"return_msg" => '',
"paytype" => 'shortcut',
);
echo base64_encode(json_encode($data));
exit();
}
/**
* 快捷支付 用户点击
*/
public function wap_shortcut_pay($user_id,$game_id)
{
// $file=file_get_contents("./Application/Sdk/OrderNo/".$user_id."-".$game_id.".txt");
// $request = json_decode(think_decrypt($file),true);
// Log::write(serialize($request), Log::DEBUG);
$is_platform = 0;
if (I('request.code') == 0 && I('request.type') == 'platform') {
$is_platform = 1; // 平台币充值
}
//$prefix = ($is_platform == 1) ? 'PF_' : 'SP_';
//$request['pay_order_number'] = $prefix . date('Ymd') . date('His') . sp_random_string(4);
$request['game_id'] = I('request.game_id');
$game_id = $request['game_id'];
$request['user_id'] = I('request.user_id');
$user_id = $request['user_id'];
$request['code'] = I('request.code');
$payInfo = M('pay_info', 'tab_')->where([
'user_id' => I('user_id'),
'game_id' => I('game_id'),
'extend' => I('extend'),
])->order('id desc')->find();
$request['price'] = $payInfo['price'];
$userToken = I('request.user_token');
if (empty($request)) {
redirect(U('Spend/notice',array('user_id'=>$user_id,'game_id'=>$game_id,'is_platform'=> $is_platform,'msg'=>'登录数据不能为空', 'user_token' => $userToken)));exit;
}
// 支付验证 是否让支付
$payCheck = pay_check($request['user_id']);
if (!$payCheck['code']) {
$this->set_message(1088, "fail", $payCheck['msg']);
}
$game = M('Game','tab_')->where(['id'=>$request['game_id']])->field('pay_status')->find();
if($game['pay_status'] == 0){
redirect(U('Spend/notice',array('user_id'=>$user_id,'game_id'=>$game_id,'is_platform'=> $is_platform,'msg'=>'该游戏暂时无法充值,请联系客服!', 'user_token' => $userToken)));exit;
}
if($request['price']*1<=0){
redirect(U('Spend/notice',array('user_id'=>$user_id,'game_id'=>$game_id,'is_platform'=> $is_platform,'msg'=>'充值金额有误', 'user_token' => $userToken)));exit;
}
C(api('Config/lists'));
if (!$is_platform) {
$request['extend'] = I('request.extend');
$extend_data = M('spend','tab_')->where(array('extend'=>$request['extend'],'game_id'=>$request['game_id'],'pay_status'=>1))->find();
if($extend_data){
redirect(U('Spend/notice',array('user_id'=>$user_id,'game_id'=>$game_id,'is_platform'=> $is_platform,'msg'=>$request['game_id'].'订单号重复,请关闭支付页面重新支付'.$request['extend'], 'user_token' => $userToken)));exit;
}
}
//折扣
$user = get_user_entity($request['user_id']);
$discount = $this->get_discount($request['game_id'],$user['promote_id'],$request['user_id']);
$discount = $discount['discount'];
$pay_amount = $discount * $request['price'] / 10;
if ($pay_amount < 0.01) {
redirect(U('Spend/notice',array('user_id'=>$user_id,'game_id'=>$game_id,'is_platform'=> $is_platform, 'msg'=>'充值金额有误.'.$pay_amount, 'user_token' => $userToken)));exit;
}
if (!$is_platform) {
$this->other_price($request, $request['price']-$pay_amount);
}
// 平台币充值
if ($is_platform) {
$request['code'] = 0;
$request['user_id'] = I('request.user_id');
$request['price'] = intval(I('request.price'));
$request['game_id'] = I('request.game_id');
$request['pay_way'] = C("PAY_WAY.SQ_SHORTCUT"); // 支付方式(-1绑币 0:平台币,1:支付宝,2:微信(扫码)3微信app 4 威富通 5聚宝云 6竣付通 7苹果支付8金猪支付 9双乾支付-支付宝 10双乾支付-银联 15双乾支付-快捷
$request['pay_status'] = 0;
$request['spend_ip'] = get_client_ip();
$payInfo = M('pay_info', 'tab_')->where([
'user_id' => I('user_id'),
'game_id' => I('game_id'),
'extend' => I('extend'),
])->order('id desc')->find();
$request['pay_order_number'] = $payInfo['order_id'];
if (!$payInfo) {
return ;
}
} else { // 游戏充值
$request['code'] = 1;
$payInfo = M('pay_info', 'tab_')->where([
'user_id' => I('user_id'),
'game_id' => I('game_id'),
'extend' => I('extend'),
])->order('id desc')->find();
if ($payInfo) {
$info = json_decode($payInfo['info'], true);
$info['deduction_amount'] = $request['deduction_amount'];
$info['actual_amount'] = $request['actual_amount'];
$info['discount_amount'] = $request['discount_amount'];
$info['price'] = $request['price'];
$infosave = json_encode($info);
M('pay_info', 'tab_')->where([
'id' => $payInfo['id']
])->save([
'type' => 'sq_shortcut', // 游戏充值
//'order_id' => $request['pay_order_number'],
//'price' => $request['actual_amount'] ? $request['actual_amount'] : $request['price'],
'info' => $infosave
]);
$info['code'] = $request['code'];
$info['pay_order_number'] = $request['pay_order_number'];
$request = $info;
$request['pay_way'] = C("PAY_WAY.SQ_SHORTCUT");
$request['pay_status'] = 0;
$request['spend_ip'] = get_client_ip();
$request['pay_order_number'] = $payInfo['order_id'];
}
}
//0 官方 1双乾
if (get_shortcut_pay_type() == 0) {
// 暂时只有双乾
}elseif(get_shortcut_pay_type() == 1){
if($request['code']==1){
$this->add_spend($request,1);
}else{
$this->add_deposit($request,1);
}
}
$this->assign("pay_amount", $request['actual_amount']?$request['actual_amount']:$request['price']);
$this->assign("user_id", $request['user_id']);
$this->assign("game_id", $request['game_id']);
$this->assign("extend", $is_platform ? $request['pay_order_number'] : I('extend'));
$this->display();
}
/**
*微信支付
*/
public function weixin_pay() {
#获取SDK上POST方式传过来的数据 然后base64解密 然后将json字符串转化成数组
$request = json_decode(base64_decode(file_get_contents("php://input")), true);
/* file_put_contents(dirname(__FILE__) . '/weixin_paywap.txt',json_encode($request)); */
if (empty($request)) {
$this->set_message(1001, "fail", "登录数据不能为空");
}
// 支付验证 是否让支付
$payCheck = pay_check($request['user_id']);
if (!$payCheck['code']) {
$this->set_message(1088, "fail", $payCheck['msg']);
}
C(api('Config/lists'));
if($request['price']*1<=0 || $request['price'] >= C('WX_PAY_LIMIT')){
$this->set_message(1011,"fail","充值金额有误");
}
// 微信支付日月限额
if (pay_limit('wx')) {
$this->set_message(1011,"fail","支付限额,暂不支持");
}
$game = M('Game','tab_')->where(['id'=>$request['game_id']])->field('pay_status')->find();
if($game['pay_status'] == 0){
$this->set_message(0,"fail","该游戏暂时无法充值,请联系客服!");
}
$extend_data = M('spend','tab_')->where(array('extend'=>$request['extend'],/* 'pay_status'=>1, */'game_id'=>$request['game_id']))->find();
if($extend_data){
$this->set_message(1089,"fail","订单号重复,请关闭支付页面重新支付");
}
$table = $request['code'] == 1 ? "spend" : "deposit";
$prefix = $request['code'] == 1 ? "SP_" : "PF_";
$request['pay_order_number'] = $prefix . date('Ymd') . date('His') . sp_random_string(4);
$request['pay_way'] = 3;
$request['pay_status'] = 0;
$request['spend_ip'] = get_client_ip();
//折扣
$user = get_user_entity($request['user_id']);
$discount = $this->get_discount($request['game_id'],$user['promote_id'],$request['user_id']);
$discount = $discount['discount'];
$discountAmount = 0;
if($prefix=='PF_'){
$pay_amount = $request['price'];
}else{
$pay_amount = $discount * $request['price'] / 10;
$discountAmount = $request['price'] - $pay_amount;
}
if(!empty($request['scheme'])) {
file_put_contents("./Application/Sdk/Scheme/".$request['game_id'].".txt",$request['scheme']);
}
// 绑币平台币优先处理
// $this->other_price($request, $discountAmount);
// $pay_amount = $request['price'];
$game_set_data = get_game_set_info($request['game_id']);
//$request['game_name']
//0 官方 1威富通
if (get_wx_pay_type() == 0) {
if(empty(C('wei_xin.email'))|| empty(C('wei_xin.partner'))||empty(C('wei_xin.key'))){
$this->set_message(1009, "fail", "支付参数未配置");
}
$weixn = new Weixin();
$is_pay = json_decode($weixn->weixin_pay(isset($request['title']) ? $request['title']: "充值", $request['pay_order_number'], $pay_amount, 'MWEB'), true);
if($is_pay['status']==1){
if($request['code']==1){
$this->add_spend($request);
}else{
$this->add_deposit($request);
}
$json_data['status'] = 200;
if($request['sdk_version']==1){
$json_data['url'] = $is_pay['mweb_url'];
$json_data['orderno'] = $request['pay_order_number'];
$json_data['paytype'] = "wx";
}else{
if(!empty($request['scheme'])) {
$redirect_url = C('PAY_DOMAIN') . "/sdk.php/Spend/pay_success2/orderno/".$request['pay_order_number'].'/game_id/'.$request['game_id'];
} else {
$redirect_url = C('PAY_DOMAIN') . "/sdk.php/Spend/pay_success/orderno/".$request['pay_order_number'];
}
$json_data['url'] = $is_pay['mweb_url'].'&redirect_url='.urlencode( $redirect_url );
$json_data['paytype'] ="wx";
}
}else{
$json_data['status'] = 500;
$json_data['url'] = C('PAY_DOMAIN');
}
$json_data['cal_url'] = C('PAY_DOMAIN');
echo base64_encode(json_encode($json_data));
exit;
// $this->redirect('WapPay/weixin_pay_view',['user_id'=>$request['user_id'],'game_id'=>$request['game_id']]);
} else if(get_wx_pay_type() == 1){ // 威富通
if( empty(C('heepay.partner'))||empty(C('heepay.key'))){
$this->set_message(1009, "fail", "支付参数未配置");
}
if($request['code']==1){
$this->add_spend($request);
}else{
$this->add_deposit($request);
}
$heepay = new Heepay();
if(!empty($request['scheme'])) { // 跳转出app
$redirect_url = 'http://' . $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success2/orderno/".$request['pay_order_number'].'/game_id/'.$request['game_id'];
} else { // 应用内
$redirect_url = 'http://' . $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success/orderno/".$request['pay_order_number'];
}
$pay['agent_id'] = C('heepay.partner');//商户号
$pay['order_no'] = $request['pay_order_number'];
$pay['time'] = date('YmdHis', time());
$pay['pay_type'] = 30;
$pay['amount'] = $pay_amount;
$pay['user_ip'] = get_client_ip();
$pay['sign_key'] = C('heepay.key');//密钥
$pay['payerName'] = "cs";
$pay['number'] = 1;
$pay['goods_note']="cs";
$pay['device'] = "wap";
$pay['bank_card_type'] = 0;
$pay['return_url'] = $redirect_url;
$url = $heepay->wxh5_pay($pay);
$json_data['status'] = 200;
$json_data['paytype'] = 'wft';
$json_data['url'] = $url;
echo base64_encode(json_encode($json_data)); exit;
}else if(get_wx_pay_type() == 2){
if( empty(C('jft_wap.partner'))||empty(C('jft_wap.key'))){
$this->set_message(1009, "fail", "支付参数未配置");
}
if($request['code']==1){
$this->add_spend($request);
}else{
$this->add_deposit($request);
}
$jtpay=new Jtpay();
if($request['sdk_version']==1){//1 安卓 2苹果
$p25_terminal=3;
$p26_iswappay=3;
}else{
$p25_terminal=2;
$p26_iswappay=3;
}
if(!empty($request['scheme'])) {
$redirect_url = 'http://' . $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success2/orderno/".$request['pay_order_number'].'/game_id/'.$request['game_id'];
} else {
$redirect_url = 'http://' . $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success/orderno/".$request['pay_order_number'];
}
$url=$jtpay->jt_pay($request['pay_order_number'],$pay_amount,$user['account'],get_client_ip(),"sdk",3,$redirect_url,$p26_iswappay,$p25_terminal);//安卓
$json_data['status'] = 200;
$json_data['paytype']='jft';
$json_data['url']=$url;
echo base64_encode(json_encode($json_data)); exit;
}else if(get_wx_pay_type() == 3){
if( empty(C('goldpig.partner'))||empty(C('goldpig.wooolid'))){
$this->set_message(1009, "fail", "支付参数未配置");
}
$request['pay_way'] = 8;
if($pay_amount*1<1){
$this->set_message(1011,"fail","单笔交易金额必须大于1元");
}
if($request['code']==1){
$this->add_spend($request);
}else{
$this->add_deposit($request);
}
$goldpig=new GoldPig();
$res = $goldpig->GoldPig($user['account'],$pay_amount,29,$request['pay_order_number']);
if($res['status']==1){
$json_data['status'] = 200;
$json_data['paytype']='wft';
$json_data['url']=$res['msg'];
}else{
$json_data['status'] = 500;
$json_data['msg']=$res['info'];
$json_data['url']='http://'.$_SERVER ['HTTP_HOST'];
$json_data['cal_url'] = C("PAY_DOMAIN");
}
echo base64_encode(json_encode($json_data)); exit;
}else{
if( empty(C('weixin_gf.partner'))||empty(C('weixin_gf.key'))){
$this->set_message(1009, "fail", "支付参数未配置");
}
$Swiftpass=new Swiftpass(C('weixin_gf.partner'),C('weixin_gf.key'));
$param['service']="pay.weixin.wappay";
$param['ip']= $request['spend_ip'];
$param['pay_amount']=$pay_amount;//;
$param['out_trade_no']= $request['pay_order_number'];
$param['game_name']= get_game_name($request['game_id']);
$param['body']="游戏充值";
if(!empty($request['scheme'])) {
$param['callback_url'] = 'http://' . $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success2/orderno/" . $request['pay_order_number'].'/game_id/'.$request['game_id'];
}else {
$param['callback_url'] = 'http://' . $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success/orderno/" . $request['pay_order_number'];
}
$url=$Swiftpass->submitOrderInfo($param);
if($url['status']==0){
$request['pay_way'] = 4;
if($request['code']==1){
$this->add_spend($request);
}else{
$this->add_deposit($request);
}
$json_data['status'] = 200;
$json_data['url']=$url['pay_info'];
}else{
$json_data['status'] = 0;
$json_data['url']='http://'.$_SERVER ['HTTP_HOST'];
}
$json_data['paytype'] ="wft";
echo base64_encode(json_encode($json_data));
}
// Header("Location: $ssd");
}
/**
* 查询订单状态
* @return [type] [description]
*/
public function get_orderno_restart(){
$request = json_decode(base64_decode(file_get_contents("php://input")), true);
$pay_where = substr($request['orderno'], 0, 2);
$map['pay_order_number'] = $request['orderno'];
switch ($pay_where) {
case 'SP':
$result = M('Spend','tab_')->field("pay_status")->where($map)->find();
break;
case 'PF':
$result = M('deposit','tab_')->field('pay_status')->where($map)->find();
break;
}
if(empty($result['pay_status'])){
$status=1086;
}else{
$status=$result['pay_status']==0?1086:200;
}
echo base64_encode(json_encode(['status'=>$status]));
}
public function weixin_pay_view($user_id,$game_id){
$file=file_get_contents("./Application/Sdk/OrderNo/".$user_id."-".$game_id.".txt");
$request = json_decode(base64_decode($file),true);
$this->assign('url',$request['url'].'&redirect_url='.(is_ssl()?'https://':'http://'). $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success");
// Header("Location: $ssd");
$this->display();
}
/**
* 竣付通支付
* @return [type] [description]
*/
public function jft_wap(){
#获取SDK上POST方式传过来的数据 然后base64解密 然后将json字符串转化成数组
$request = json_decode(base64_decode(file_get_contents("php://input")), true);
if (empty($request)) {
$this->set_message(1001, "fail", "登录数据不能为空");
}
// 支付验证 是否让支付
$payCheck = pay_check($request['user_id']);
if (!$payCheck['code']) {
$this->set_message(1088, "fail", $payCheck['msg']);
}
C(api('Config/lists'));
if($request['price']<0){
$this->set_message(1011,"fail","充值金额有误");
}
$table = $request['code'] == 1 ? "spend" : "deposit";
$prefix = $request['code'] == 1 ? "SP_" : "PF_";
$request['pay_order_number'] = $prefix . date('Ymd') . date('His') . sp_random_string(4);
$request['pay_way'] = 3;
$request['pay_status'] = 0;
$request['spend_ip'] = get_client_ip();
//折扣
$user = get_user_entity($request['user_id']);
$discount = $this->get_discount($request['game_id'],$user['promote_id'],$request['user_id']);
$discount = $discount['discount'];
$pay_amount = $discount * $request['price'] / 10;
// 绑币平台币处理
$this->other_price($request, $request['price']-$pay_amount);
if($request['code']==1){
$this->add_spend($request);
}else{
$this->add_deposit($request);
}
file_put_contents("./Application/Sdk/OrderNo/".$request['user_id']."-".$request['game_id'].".txt",think_encrypt(json_encode($request)));
$sss="http://".$_SERVER['HTTP_HOST'].'/sdk.php/Spend/pay_way/user_id/'.$request['user_id'].'/game_id/'.$request['game_id'].'/type/3';
redirect($sss);
}
/**
* 双乾支付
* @return [type] [description]
*/
public function squnion_wap(){
$request = json_decode(base64_decode(file_get_contents("php://input")), true);
//pp($request);
/* $request['user_id'] = 80;
$request['game_id'] = 143;
$request['price'] = 0.01;
$request['code'] = 1;
$request['extend'] = "11212452299229";
$request['pay_order_number'] = "11212452299229"; */
// 支付验证 是否让支付
$payCheck = pay_check($request['user_id']);
if (!$payCheck['code']) {
$this->set_message(1088, "fail", $payCheck['msg']);
}
if (empty($request)) {
$this->set_message(1001, "fail","登录数据不能为空");
}
$game = M('Game','tab_')->where(['id'=>$request['game_id']])->field('pay_status')->find();
if($game['pay_status'] == 0){
$this->set_message(0, "fail","该游戏暂时无法充值,请联系客服!");
}
if($request['price']*1<=0){
$this->set_message(1011,"fail","充值金额有误");
}
C(api('Config/lists'));
$extend_data = M('spend','tab_')->where(array('extend'=>$request['extend'],'game_id'=>$request['game_id'],'pay_status'=>1))->find();
if($extend_data){
$this->set_message(1089,"fail","订单号重复,请关闭支付页面重新支付");
}
$table = $request['code'] == 1 ? "spend" : "deposit";
$prefix = $request['code'] == 1 ? "SP_" : "PF_";
$request['pay_order_number'] = $prefix . date('Ymd') . date('His') . sp_random_string(4);
$request['pay_way'] = 7; // 支付方式(-1绑币 0:平台币,1:支付宝,2:微信(扫码)3微信app 4 威富通 5聚宝云 6竣付通 7双乾银联
$request['pay_status'] = 0;
$request['spend_ip'] = get_client_ip();
$out_trade_no = $request['pay_order_number'];
//折扣
$user = get_user_entity($request['user_id']);
$discount = $this->get_discount($request['game_id'],$user['promote_id'],$request['user_id']);
$discount = $discount['discount'];
$pay_amount = $discount * $request['price'] / 10;
if ($pay_amount < 0.01) {
redirect(U('Spend/notice',array('user_id'=>$request['user_id'],'game_id'=>$request['game_id'],'msg'=>'充值金额有误.'.$pay_amount)));exit;
}
$this->other_price($request, $request['price']-$pay_amount);
//0 官方 1双乾
if (get_union_pay_type() == 0) {
// 暂时只有双乾
}elseif(get_union_pay_type() == 1){
file_put_contents("./Application/Sdk/OrderNo/".$request['user_id']."-".$request['game_id'].".txt",think_encrypt(json_encode($request)));
if($request['code']==1){
$this->add_spend($request,1);
}else{
$this->add_deposit($request, 1);
}
$sqpay=new Sqpay();
$returl = 'http://' . $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success2/orderno/".$request['pay_order_number'].'/game_id/'.$request['game_id'];
$ret = $sqpay->sq_pay($out_trade_no, $pay_amount, C("sqpay.partner"), "UNION", "测试产品1", get_client_ip(),$returl);
$ret = json_decode($ret, true);
if ($ret[0]['payHtml']) {
$data = array(
'status' => 200,
"url" => '',
"html" => $ret[0]['payHtml'],
"return_msg" => '',
"paytype" => 'squnion',
);
} else {
$data = array(
'status' => 1,
"url" => '',
"html" => '',
"return_msg" => '失败请重试',
"paytype" => '',
);
}
echo base64_encode(json_encode($data));
exit();
}
// redirect($json_data['url']);
}
/**
* 双乾小程序支付
* 流程1.app端唤起小程序 2小程序请求服务端拿到支付参数 3小程序发起支付之后 回调服务端 4服务端通知客户端
* return 相关支付参数 回调url
*/
public function small_program() {
$request = json_decode(base64_decode(file_get_contents("php://input")), true);
if (empty($request)) {
$this->set_message(1001, "fail", "登录数据不能为空");
}
if (!$request['openid'] || !$request['price'] || !$request['game_id']) {
$this->set_message(1001, "fail", "小程序参数有误");
}
$game = M('Game','tab_')->where(['id'=>$request['game_id']])->field('pay_status')->find();
if($game['pay_status'] == 0){
$this->set_message(0, "fail","该游戏暂时无法充值,请联系客服!");
}
if($request['price']*1<=0){
$this->set_message(1011,"fail","充值金额有误");
}
$extend_data = M('spend','tab_')->where(array('extend'=>$request['extend'],'game_id'=>$request['game_id'],'pay_status'=>1))->find();
if($extend_data){
$this->set_message(1089,"fail","订单号重复,请关闭支付页面重新支付");
}
$prefix = ($request['code'] == 1) ? "SP_" : "PF_";
$request['pay_order_number'] = $prefix . date('Ymd') . date('His') . sp_random_string(4);
$request['pay_way'] = C('PAY_WAY.SQ_SMALL_PROGRAM');
$request['pay_status'] = 0;
$request['spend_ip'] = get_client_ip();
//折扣
$user = get_user_entity($request['user_id']);
$discount = $this->get_discount($request['game_id'],$user['promote_id'],$request['user_id']);
$discount = $discount['discount'];
$discountAmount = 0;
if($prefix=='PF_'){
$pay_amount = $request['price'];
}else{
$pay_amount = $discount * $request['price'] / 10;
$discountAmount = $request['price'] - $pay_amount;
}
if(!empty($request['scheme'])) {
file_put_contents("./Application/Sdk/Scheme/".$request['game_id'].".txt",$request['scheme']);
}
// 绑币平台币优先处理
$this->other_price($request, $discountAmount);
$pay_amount = $request['price'];
if($request['code']==1){
$this->add_spend($request,1);
}else{
$this->add_deposit($request, 1);
}
$sqpay = new Sqpay();
$data['userId'] = $request['openid']; // openid
$data['order_no'] = $request['pay_order_number'];
$data['merno'] = C('sqpay.partner');
$data['subject'] = "消费-".$request["pay_order_number"];
$data['ip'] = get_client_ip();
$data['returnurl'] = C('PAY_DOMAIN'). "/sdk.php/Spend/pay_success/orderno/".$request['pay_order_number'].'/game_id/'.$request['game_id'];
$data['notifyurl'] = C('PAY_DOMAIN')."/callback.php/Notify/sq_callback";
$data['amount'] = $request['price'];
$data['appId'] = C('wei_xin.email');
$data['secret'] = C('sqpay.key');
$data['MerRemark'] = $data['order_no'];
$ret = $sqpay->sq_wxsmallpay($data);
if ($ret[0]['respCode'] == "000000") {
echo json_encode(array(
'code' => 1,
'Amount' => $ret[0]['Amount'],
'orderNo' => $ret[0]['orderNo'], // 微信生成的订单号
'platformNumber' => $request['pay_order_number'], // 平台订单号
'wxjsapiStr' => $ret[0]['wxjsapiStr']
));
exit();
}
echo json_encode(array(
'code' => 0,
'msg' => $ret[0]['respMess'],
));
exit();
}
}