示例#1
0
 public function api($script_name, $params, $method = 'post', $protocol = 'http')
 {
     if (!isset($params['openid']) || empty($params['openid'])) {
         return array('ret' => OPENAPI_ERROR_REQUIRED_PARAMETER_EMPTY, 'msg' => 'openid is empty');
     }
     if (!isset($params['openkey']) || empty($params['openkey'])) {
         return array('ret' => OPENAPI_ERROR_REQUIRED_PARAMETER_EMPTY, 'msg' => 'openkey is empty');
     }
     if (!self::isOpenId($params['openid'])) {
         return array('ret' => OPENAPI_ERROR_REQUIRED_PARAMETER_INVALID, 'msg' => 'openid is invalid');
     }
     unset($params['sig']);
     $params['appid'] = $this->appid;
     $params['format'] = $this->format;
     $secret = $this->appkey . '&';
     $sig = SnsSigCheck::makeSig($method, $script_name, $params, $secret);
     $params['sig'] = $sig;
     $url = $protocol . '://' . $this->server_name . $script_name;
     $cookie = array();
     $start_time = SnsStat::getTime();
     $ret = SnsNetwork::makeRequest($url, $params, $cookie, $method, $protocol);
     if (false === $ret['result']) {
         $result_array = array('ret' => OPENAPI_ERROR_CURL + $ret['errno'], 'msg' => $ret['msg']);
     }
     $result_array = json_decode($ret['msg'], true);
     if (is_null($result_array)) {
         $result_array = array('ret' => OPENAPI_ERROR_RESPONSE_DATA_INVALID, 'msg' => $ret['msg']);
     }
     if ($this->is_stat) {
         $stat_params = array('appid' => $this->appid, 'pf' => $params['pf'], 'rc' => $result_array['ret'], 'svr_name' => $this->server_name, 'interface' => $script_name, 'protocol' => $protocol, 'method' => $method);
         SnsStat::statReport($this->stat_url, $start_time, $stat_params);
     }
     return $result_array;
 }
示例#2
0
 /**
  * 执行API调用,返回结果数组
  *
  * @param array $script_name 调用的API方法
  * @param array $params 调用API时带的参数
  * @param string $method 请求方法 post / get
  * @param string $protocol 协议类型 http / https
  * @return array 结果数组
  */
 public function api($script_name, $params, $method = 'post', $protocol = 'http')
 {
     // 检查 openid 是否为空
     if (!isset($params['openid']) || empty($params['openid'])) {
         return array('ret' => PYO_ERROR_REQUIRED_PARAMETER_EMPTY, 'msg' => 'openid is empty');
     }
     // 检查 openkey 是否为空
     if (!isset($params['openkey']) || empty($params['openkey'])) {
         return array('ret' => PYO_ERROR_REQUIRED_PARAMETER_EMPTY, 'msg' => 'openkey is empty');
     }
     // 检查 openid 是否合法
     if (!self::isOpenId($params['openid'])) {
         return array('ret' => PYO_ERROR_REQUIRED_PARAMETER_INVALID, 'msg' => 'openid is invalid');
     }
     // 无需传sig, 会自动生成
     unset($params['sig']);
     // 添加一些参数
     $params['appid'] = $this->appid;
     $params['format'] = $this->format;
     // 生成签名
     $secret = $this->appkey . '&';
     $sig = SnsSigCheck::makeSig('post', $script_name, $params, $secret);
     $params['sig'] = $sig;
     // 发起请求
     $url = "{$protocol}://{$this->server_name}{$script_name}";
     $cookie = array();
     $ret = SnsNetwork::makeRequest($url, $params, $cookie, $method, $protocol);
     if (false === $ret['result']) {
         return array('ret' => PYO_ERROR_CURL + $ret['errno'], 'msg' => $ret['msg']);
     }
     $result_array = json_decode($ret['msg'], true);
     // 远程返回的不是 json 格式, 说明返回包有问题
     if (is_null($result_array)) {
         return array('ret' => PYO_ERROR_RESPONSE_DATA_INVALID, 'msg' => $ret['msg']);
     }
     return $result_array;
 }
示例#3
0
 /**
  * 组装参数签名并请求接口
  *
  * @param string $url
  * @param array $params
  * @param string $method
  * @param false|array $multi false:普通post array: array ( '{fieldname}' =>array('type'=>'mine','name'=>'filename','data'=>'filedata') ) 文件上传
  * @return string
  */
 public function request($url, $method, $params, $multi = false, $is_oauth = true)
 {
     if ($is_oauth) {
         //使用oauth参数集调用接口
         $oauth_signature = $this->sign($url, $method, $params);
         $params[$this->oauth_signature_key] = $oauth_signature;
     } else {
         //使用openod&openkey参数集调用接口
         //去除 oauth 的所有认证参数,使用openid&openkey 参数集合
         unset($params['oauth_token']);
         unset($params['oauth_nonce']);
         unset($params['oauth_consumer_key']);
         unset($params['oauth_signature_method']);
         unset($params['oauth_version']);
         unset($params['oauth_timestamp']);
         unset($params['oauth_signature']);
         // 生成签名
         require_once "sns_sig_check.php";
         $urls = @parse_url($url);
         $sig = SnsSigCheck::makeSig($method, $urls['path'], $params, $this->_app_secret . '&');
         $params['sig'] = $sig;
         print_r($params);
     }
     return $this->http($url, $params, $method, $multi);
 }
示例#4
0
 /**
  * 执行上传文件API调用,返回结果数组
  *
  * @param string $script_name 调用的API方法,比如/v3/user/get_info, 参考 http://wiki.open.qq.com/wiki/API_V3.0%E6%96%87%E6%A1%A3
  * @param array $params 调用API时带的参数,必须是array
  * @param array $array_files 调用API时带的文件,必须是array,key为openapi接口的参数,value为"@"加上文件全路径的字符串
  *															  举例 array('pic'=>'@/home/xxx/hello.jpg',...);
  * @param string $protocol 协议类型 http / https
  * @return array 结果数组
  */
 public function apiUploadFile($script_name, $params, $array_files, $protocol = 'http')
 {
     // 检查 openid 是否为空
     if (!isset($params['openid']) || empty($params['openid'])) {
         return array('ret' => OPENAPI_ERROR_REQUIRED_PARAMETER_EMPTY, 'msg' => 'openid is empty');
     }
     // 检查 openid 是否合法
     if (!self::isOpenId($params['openid'])) {
         return array('ret' => OPENAPI_ERROR_REQUIRED_PARAMETER_INVALID, 'msg' => 'openid is invalid');
     }
     // 无需传sig, 会自动生成
     unset($params['sig']);
     // 添加一些参数
     $params['appid'] = $this->appid;
     $params['format'] = $this->format;
     // 生成签名
     $secret = $this->appkey . '&';
     $sig = SnsSigCheck::makeSig('post', $script_name, $params, $secret);
     $params['sig'] = $sig;
     //上传文件,图片参数不能参与签名
     foreach ($array_files as $k => $v) {
         $params[$k] = $v;
     }
     $url = $protocol . '://' . $this->server_name . $script_name;
     $cookie = array();
     //记录接口调用开始时间
     $start_time = SnsStat::getTime();
     //通过调用以下方法,可以打印出最终发送到openapi服务器的请求参数以及url,默认注释
     //self::printRequest($url, $params,'post');
     // 发起请求
     $ret = SnsNetwork::makeRequestWithFile($url, $params, $cookie, $protocol);
     if (false === $ret['result']) {
         $result_array = array('ret' => OPENAPI_ERROR_CURL + $ret['errno'], 'msg' => $ret['msg']);
     }
     $result_array = json_decode($ret['msg'], true);
     // 远程返回的不是 json 格式, 说明返回包有问题
     if (is_null($result_array)) {
         $result_array = array('ret' => OPENAPI_ERROR_RESPONSE_DATA_INVALID, 'msg' => $ret['msg']);
     }
     // 统计上报
     if ($this->is_stat) {
         $stat_params = array('appid' => $this->appid, 'pf' => $params['pf'], 'rc' => $result_array['ret'], 'svr_name' => $this->server_name, 'interface' => $script_name, 'protocol' => $protocol, 'method' => 'post');
         SnsStat::statReport($this->stat_url, $start_time, $stat_params);
     }
     //通过调用以下方法,可以打印出调用openapi请求的返回码以及错误信息,默认注释
     //self::printRespond($result_array);
     return $result_array;
 }
示例#5
0
 public static function makeTxSignature($params, $paykey, $url_path)
 {
     $secret = $paykey . '&';
     //调用SnsSigCheckModel::makeSig接口计算签名
     $sig = \SnsSigCheck::makeSig('GET', $url_path, $params, $secret);
     //合并签名到参数
     return $sig;
 }
示例#6
0
 public function api_pay($script_name, $params, $cookie, $method = 'post', $protocol = 'http')
 {
     // 添加一些参数
     $params['appid'] = $this->pay_appid;
     $params['format'] = $this->format;
     // 无需传sig, 会自动生成
     unset($params['sig']);
     // 生成签名
     $secret = $this->pay_appkey . '&';
     $sig = SnsSigCheck::makeSig($method, $script_name, $params, $secret);
     $params['sig'] = $sig;
     $url = $protocol . '://' . $this->server_name . $script_name;
     // 通过调用以下方法,可以打印出最终发送到openapi服务器的请求参数以及url,默认为注释
     self::printCookies($cookie);
     self::printRequest($url, $params, $method);
     // 发起请求
     $ret = SnsNetwork::makeRequest($url, $params, $cookie, $method, $protocol);
     if (false === $ret['result']) {
         $result_array = array('ret' => OPENAPI_ERROR_CURL + $ret['errno'], 'msg' => $ret['msg']);
     }
     $result_array = json_decode($ret['msg'], true);
     // 远程返回的不是 json 格式, 说明返回包有问题
     if (is_null($result_array)) {
         $result_array = array('ret' => OPENAPI_ERROR_RESPONSE_DATA_INVALID, 'msg' => $ret['msg']);
     }
     // 通过调用以下方法,可以打印出调用支付API请求的返回码以及错误信息,默认注释
     self::printRespond($result_array);
     return $result_array;
 }
示例#7
0
header("Content-type: text/html; charset=utf-8");
log::init('./log', 'tencent_log');
$uri = $_SERVER['REQUEST_URI'];
$method = strtoupper($_SERVER['REQUEST_METHOD']);
if ("GET" == $method) {
    $params = $_GET;
} else {
    if ("POST" == $method) {
        $body = file_get_contents('php://input');
        $params = $_POST;
    }
}
log::instance()->debug("new con: {$uri} {$body}");
$pf_info = $config["tencent"][stripslashes($params["appid"])];
$api = substr($uri, 0, strcspn($uri, '?'));
if (!SnsSigCheck::verifySig($method, $api, $params, $pf_info["AppKey"] . '&', $params["sig"])) {
    log::instance()->error("ret: 签名无效");
    $obj->ret = 4;
    $obj->msg = "签名无效";
    echo json_encode($obj);
    exit;
}
$just_record = true;
if ($just_record) {
    $ret = "SUCCESS";
} else {
    list($note, $t1, $t2) = split("\\*", stripslashes($params["appmeta"]));
    $note = json_decode(stripslashes($note), true);
    $ret = recharge($pf_info["PF"], stripslashes($params["zoneid"]), $note["odr"], $note["uid"], $note["item"], $params["amt"] / 100 + $params["payamt_coins"] / 10 + $params["pubacct_payamt_coins"] / 10, stripslashes($params["billno"]), 0);
}
log::instance()->debug("ret: " . $ret);
示例#8
0
    return strstr($uri, '?', true);
}
// 得到请求方式
$method = $_SERVER['REQUEST_METHOD'];
$url_path = getUrl($_SERVER["REQUEST_URI"]);
$param = array();
if ($method == "GET") {
    $param = $_GET;
} elseif ($method == "POST") {
    $param = $_POST;
} else {
    error_log(FormatLogStr('midas', 'callback', ERROR_PARAM, 'invalidate request method : ' . $method));
    return;
}
$appkey = $appkey . '&';
if (SnsSigCheck::verifySig($method, $url_path, $param, $appkey, $param['sig'])) {
    //获取前台附加参数uin#shopid
    $shopData = explode('*', $param['appmeta']);
    if (count($shopData) < 2) {
        error_log(FormatLogStr('midas', 'callback', ERROR_PARAM, json_encode($param)));
        die('result=FAIL&resultMsg=附加参数个数不正确');
    }
    $redis = new RedisHelper($config);
    if ($redis->CheckOrder('recharge_order', $_REQUEST['billno'])) {
        error_log(FormatLogStr('midas', 'callback', ERROR_EXIST, json_encode($param)));
        die('{"ret":4,"msg": "订单已经存在"}');
    }
    $cache['Money'] = intval($param['amt']);
    $cache['Status'] = 'success';
    $cache['ExtOrderId'] = $param['billno'];
    $cache['PayTime'] = time();
示例#9
0
<?php

require_once __DIR__ . '/lib/SnsSigCheck.php';
require_once __DIR__ . '/lib/SnsSigCheck.php';
require "config.php";
$data = '{"amt":"600","appid":"1450005915","appmeta":"1000040*14*qdqb*qq","billno":"-APPDJSX38525-20160126-1739135208","channel_id":"73213123-android-73213123-qq-1105115982-67E87013295359D1E1C300EE6BC1230F-qq","clientver":"android","ebazinga":"1","openid":"67E87013295359D1E1C300EE6BC1230F","payamt_coins":"0","payitem":"14*60*1","providetype":"5","pubacct_payamt_coins":"","token":"0CCC5F261838D6EFF846A3EA60187C6213669","ts":"1453801153","version":"v3","zoneid":"1","sig":"T5YTSP1DZ6yfs\\/XWBaI+64jWqLo="}';
$arr = json_decode($data, 1);
$sig = $arr['sig'];
SnsSigCheck::verifySig("GET", "/midas/callback.php", $arr, $appkey . '&', $sig);