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

238 lines
5.6 KiB

<?php
// 微博登录插件类,如有BUG请联系本人!!
/*===========================================================
* name : 支付宝
* author : `clearlove'
* QQ : 631001424
* E-mail : 631001424@qq.com
* VERSION : 1.0v
* DATE : 2012-2-23
* 尊重作者,保留版权信息
* 版权所有 `clearlove'
* 使用;不允许对程序代码以任何形式任何目的的再发布。
**/
if (defined('WEBSITE'))
{
global $_LANG;
$_LANG['help']['APP_KEY'] = '在 支付宝中申请的 APP ID';
$_LANG['help']['APP_SECRET'] = '在QQ中申请的 KEY';
$_LANG['APP_KEY'] = 'Partner ID';
$_LANG['APP_SECRET'] = '安全校验码';
$i = isset($web) ? count($web) : 0;
// 类名
$web[$i]['name'] = '支付宝';
// 文件名,不包含后缀
$web[$i]['type'] = 'alipay';
$web[$i]['className'] = 'alipay';
// 作者信息
$web[$i]['author'] = '`Dream`';
// 作者QQ
$web[$i]['qq'] = '0000210';
// 作者邮箱
$web[$i]['email'] = '0000210@ecmoban.com';
// 申请网址
$web[$i]['website'] = 'http://open.alipay.com';
// 版本号
$web[$i]['version'] = '2.7v';
// 更新日期
$web[$i]['date'] = '2013-11-5';
// 配置信息
$web[$i]['config'] = array(
array('type'=>'text' , 'name'=>'APP_KEY', 'value'=>''),
array('type'=>'text' , 'name' => 'APP_SECRET' , 'value' => ''),
);
}
if (!defined('WEBSITE'))
{
include 'oath2.class.php';
class website extends oath2
{
var $partner = '';
var $key = '';
var $alipay_url = 'https://mapi.alipay.com/gateway.do?';
var $http_verify_url = 'http://notify.alipay.com/trade/notify_query.do';
var $input_charset = 'utf-8';
var $transport = 'http';
var $sign_type = 'MD5';
var $token;
var $error_msg;
var $parameter = array();
// 构造函数
function __construct(){
$this->website();
}
function website()
{
$this->partner = APP_KEY;
$this->key = APP_SECRET;
$this->parameter = array(
"_input_charset" => trim(strtolower($this->input_charset)),
"partner" => trim($this->partner),
"return_url" => '',
"service" => "alipay.auth.authorize",
"target_service" => 'user.auth.quick.login'
);
}
function login($return_url)
{
$url = strpos($return_url , '?') > 0 ? $return_url . '&time='.time() : $return_url . '?time='.time();
$this->parameter['return_url'] = $url;
return $this->getUrl();
}
function getAccessToken()
{
$mysign['is_success'] = $_REQUEST['is_success'];
$mysign['notify_id'] = $_REQUEST['notify_id'];
$mysign['real_name'] = $_REQUEST['real_name'];
$mysign['token'] = $_REQUEST['token'];
$mysign['user_id'] = $_REQUEST['user_id'];
$mysign['sign'] = $_REQUEST['sign'];
$mysign['sign_type'] = $_REQUEST['sign_type'];
$mysign = $this->getMysign($mysign);
$responseTxt = 'true';
if(!empty($_REQUEST["notify_id"]))
{
$p = array();
$p['partner'] = $this->partner;
$p['notify_id'] = $_REQUEST["notify_id"];
$responseTxt = $this->OAthou( $this->http_verify_url , $p);
}
if (preg_match("/true$/i",$responseTxt) && $mysign == $_REQUEST["sign"]) { // 不管真也好 失败也罢!都成功了
return $_REQUEST; // 只有两个有用的东西
}
$this->error('J102' , '验证sign错误');
return false;
}
function setAccessToken($token)
{
$this->token = $token;
return true;
}
function getMessage() // 就只有这么多了
{
$ret = array();
$ret['name'] = $this->token['real_name'];
$ret['sex'] = 0; // 未知性别;
$ret['user_id'] = $this->token['user_id'];
$ret['img'] = '';
$ret['rank_id'] = RANK_ID;
if(defined('EC_CHARSET') && EC_CHARSET == 'gbk'){
$info = $this->togbk($info);
}
return $ret;
}
function getUrl()
{
$para_filter = $this->paraFilter($this->parameter);
$para_sort = $this->argSort($para_filter);
$mysign = $this->buildMysign($para_sort, $this->key , $this->sign_type);
$para_filter['return_url'] = urlencode($para_filter['return_url']);
$para_filter['sign'] = $mysign;
$para_filter['sign_type'] = $this->sign_type;
return $this->alipay_url . $this->createLinkstring($para_filter);
}
function paraFilter($para) {
$para_filter = array();
while (list ($key, $val) = each ($para)) {
if($key == 'sign' || $key == 'sign_type' || $val == '')continue;
else $para_filter[$key] = $para[$key];
}
return $para_filter;
}
function sign($prestr,$sign_type='MD5') {
$sign='';
if($sign_type == 'MD5') {
$sign = md5($prestr);
}
return $sign;
}
function buildMysign($sort_para , $key , $sign_type = "MD5")
{
$prestr = $this->createLinkstring($sort_para);
$prestr = $prestr.$key;
$mysgin = $this->sign($prestr,$sign_type);
return $mysgin;
}
function argSort($para) {
ksort($para);
reset($para);
return $para;
}
function createLinkstring($para) {
$arg = "";
while (list ($key, $val) = each ($para)) {
$arg.=$key."=".$val."&";
}
$arg = substr($arg,0,count($arg)-2);
if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
return $arg;
}
function getMysign($para_temp) {
$para_filter = $this->paraFilter($para_temp);
$para_sort = $this->argSort($para_filter);
$mysign = $this->buildMysign($para_sort, $this->key, $this->sign_type);
return $mysign;
}
function OAthou($url , $meth = array())
{
return $this->http($url , 'POST' , $meth);
}
// NUM code
// String message
// String 附加错误
function error($code , $message , $string ='')
{
$this->add_error($code , $message , $string);
}
}
}
?>