首页 > php教程 > php手册 > 正文

第三方登录之支付宝登录,基于ThinkSDK

php中文网
发布: 2016-06-07 11:44:32
原创
3727人浏览过

增加ThinkSDK的支付宝第三方登录
1、配置文件增加相应参数//支付宝登录<br>     'THINK_SDK_ALIPAY' =&gt; array(<br>         'APP_KEY'    =&gt; '', //应用注册成功后分配的 APP ID<br>         'APP_SECRET' =&gt; '', //应用注册成功后分配的KEY<br>         'CALLBACK'   =&gt; URL_CALLBACK . 'alipay',<br>     ),2、相关SDK代码,因为我们公司用的zend framework,我将thinkSDK移植进来肯定做了修改,所以仅供参考。支付宝登录与其他的不同,登录时有sign验证,而且只用请求一次,所以重载了thinkouath的部分类。<?php <br /> /**<br>  * @Author: 杰少pakey<br>  * @Email : admin@ptcms.com<br>  * @File  : AlipaySDK.php<br>  */<br><br> class AlipaySDK extends ThinkOauth{<br>     /**<br>      * 获取requestCode的api接口<br>      * @var string<br>      */<br>     protected $GetRequestCodeURL = 'https://mapi.alipay.com/gateway.do';<br><br>     /**<br>      * API根路径<br>      * @var string<br>      */<br>     protected $ApiBase = 'https://mapi.alipay.com/gateway.do';<br><br>     public function getRequestCodeURL(){<br>         $this-&gt;config();<br>         $params = array(<br>             'input_charset'     =&gt; 'utf-8',<br>             'login_service'  =&gt; 'user_auth',<br>             'partner' =&gt; $this-&gt;AppKey,<br>             'request_id'=&gt;date('YmdHis').rand(1000,9999),<br>             'return_url'=&gt;$this-&gt;Callback,<br>             'return_url_failed'=&gt;$this-&gt;Callback,<br>             'service'=&gt;'wap.user.common.login',<br>         );<br>         $params['sign']=$this-&gt;createSign($params);<br>         $params['sign_type']='MD5';<br>         return $this-&gt;GetRequestCodeURL . '?' . http_build_query($params);<br>     }<br><br>     public function getAccessToken($code='',$extend=''){<br>         $sign=$_GET['sign'];<br>         unset($_GET['a'],$_GET['type'],$_GET['sign']);<br>         if ($sign===$this-&gt;createSign($_GET)){<br>             $this-&gt;Token=array(<br>                 'access_token'=&gt;$_GET['login_token'],<br>                 'openid'=&gt;$_GET['user_id'],<br>             );<br>             return $this-&gt;Token;<br>         }else{<br>             exit('签名验证失败');<br>         }<br>     }<br><br>     protected function createSign($params)<br>     {<br>         ksort($params);<br>         $stringToBeSigned = "";<br>         $i = 0;<br>         foreach ($params as $k =&gt; $v) {<br>             if ($i == 0) {<br>                 $stringToBeSigned .= "$k" . "=" . "$v";<br>             } else {<br>                 $stringToBeSigned .= "&amp;" . "$k" . "=" . "$v";<br>             }<br>             $i++;<br>         }<br>         unset ($k, $v);<br>         return md5($stringToBeSigned.$this-&gt;AppSecret);<br>     }<br><br>     /**<br>      * 组装接口调用参数 并调用接口<br>      */<br>     public function call($api, $param = array(), $method = 'GET', $multi = false){<br>         $param['partner']=$this-&gt;AppKey;<br>         $param['sign']=$this-&gt;createSign($param);<br>         $param['sign_type']='MD5';<br>         $data = $this-&gt;http($this-&gt;url($api), $param, $method);<br>         return ($data);<br>     }<br><br>     /**<br>      * 解析access_token方法请求后的返回值<br>      */<br>     protected function parseToken($result, $extend){<br><br>     }<br><br>     /**<br>      * 获取当前授权应用的openid<br>      */<br>     public function openid(){<br>         $data = $this-&gt;Token;<br>         if(!empty($data['openid']))<br>             return $data['openid'];<br>         else<br>             exit('没有获取到支付宝用户ID!');<br>     }<br><br> }3、获取信息的接口,支付宝默认仅提供userid和usertype,更多需要去申请。另外返回是xml,需要解析,这里就简单做下示例。public static function alipay($token){<br>         $alipay=DKOauth::getInstance('alipay', $token);<br>         $param=array(<br>             '_input_charset'=&gt;'utf-8',<br>             'input_charset'=&gt;'utf-8',<br>             'service'=&gt;'mobile.common.login.userInfo.query',<br>             'token'=&gt;$token['access_token'],<br>             'format'=&gt;'json',<br>         );<br>         $data=$alipay-&gt;call('',$param);<br>         return $data;<br>     }首发:http://pakey.net/blog/557.html,有问题请到这里留言

AD:真正免费,域名+虚机+企业邮箱=0元

支付宝
支付宝

支付宝,全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付服务,有需要的小伙伴快来保存下载体验吧!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号