php實(shí)現(xiàn)paypal 授權(quán)登錄
更新時(shí)間:2015年05月28日 15:10:27 投稿:hebedich
本文給大家分享的是php實(shí)現(xiàn)的paypal授權(quán)登錄的代碼,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。
php實(shí)現(xiàn)paypal 授權(quán)登錄
<?php /** * @project paypal login * @author jiangjianhe * @date 2015-04-03 */ class paypallogin { //沙箱token鏈接 private $_sanbox_oauth2_auth_uri = 'https://www.sandbox.paypal.com/webapps/auth/protocol/openidconnect/v1/authorize'; private $_live_oauth2_auth_uri = 'https://www.paypal.com/webapps/auth/protocol/openidconnect/v1/authorize'; private $_acquire_user_profile_sandbox_url = 'https://www.sandbox.paypal.com/webapps/auth/protocol/openidconnect/v1/userinfo?schema=openid&access_token='; private $_acquire_user_profile_live_url = 'https://www.paypal.com/webapps/auth/protocol/openidconnect/v1/userinfo?schema=openid&access_token='; //沙箱token鏈接 private $_token_service_sandbox_url = 'https://www.sandbox.paypal.com/webapps/auth/protocol/openidconnect/v1/tokenservice'; private $_token_service_live_url = 'https://www.paypal.com/webapps/auth/protocol/openidconnect/v1/tokenservice'; private $_sanbox_flag = true; private $_client_id = null; private $_client_secret = null; private $_redirect_uri = null; private $_state = ''; private $_scope = 'openid email phone profile address https://uri.paypal.com/services/paypalattributes'; //scope 參數(shù)決定訪問(wèn)令牌的訪問(wèn)權(quán)限 各個(gè)參數(shù)詳解url;:https://www.paypal-biz.com/product/login-with-paypal/index.html#configureButton public $token = null; public $protocol = "http"; /** * @name 構(gòu)造函數(shù) * @param $flag 是否沙箱環(huán)境 */ public function __construct($redirect_uri, $client_id,$client_secret,$scope,$state,$flag = true) { $this->_sanbox_flag = $flag; $this->_redirect_uri = $redirect_uri; $this->_client_id = $client_id; $this->_client_secret = $client_secret; $this->_scope = $scope; $this->_state = $state; } /** * 創(chuàng)建paypal request url * @return string */ public function create_request_url() { $oauth2_auth_uri = $this->_sanbox_flag ? $this->_sanbox_oauth2_auth_uri :$this->_live_oauth2_auth_uri; $url = $oauth2_auth_uri.'?'. http_build_query( array( 'client_id' => $this->_client_id, //通過(guò)應(yīng)用程序注冊(cè)流程獲得的唯一客戶端標(biāo)識(shí)符。必需。 'response_type' =>'code', //表明授權(quán)代碼被發(fā)送回應(yīng)用程序返回URL。為了使訪問(wèn)令牌在用戶代理中不可見(jiàn), 建議使用<code>code</code>一值。如果您希望在響應(yīng)中同時(shí)收到授權(quán)代碼和 id_token ,請(qǐng)傳遞 code+id_token。另一個(gè)可能的 response_type 值是 token ——大部分由javascript和移動(dòng)客戶端等公共客戶端使用。 'scope' => $this->_scope,//;implode(',', $this->scope), 'redirect_uri' => urlencode($this->_redirect_uri), //應(yīng)用程序的返回URL。結(jié)構(gòu)、主機(jī)名和端口必須與您在注冊(cè)應(yīng)用程序時(shí)設(shè)置的返回URL相符。 'nonce' => time().rand(), //不透明的隨機(jī)標(biāo)識(shí)符,可減少重放攻擊風(fēng)險(xiǎn)。簡(jiǎn)單的函數(shù)是:(timestamp + Base64 encoding (random\[16\]))。 'state' => $this->_state, // CSRF驗(yàn)證碼 ) ); return $url; } /** * get PayPal access token * @param string $code ? * @return string access token */ public function acquire_access_token($code ) { $accessToken = null; try { $postvals = sprintf("client_id=%s&client_secret=%s&grant_type=authorization_code&code=%s",$this->_client_id,$this->_client_secret,$code); if($this->_sanbox_flag) $ch = curl_init($this->_token_service_sandbox_url); else $ch = curl_init($this->_token_service_live_url); $options = array( CURLOPT_POST => 1, CURLOPT_VERBOSE => 1, CURLOPT_POSTFIELDS => $postvals, CURLOPT_RETURNTRANSFER => 1, CURLOPT_SSL_VERIFYPEER => FALSE, //CURLOPT_SSLVERSION => 2 ); curl_setopt_array($ch, $options); $response = curl_exec($ch); $error = curl_error($ch); curl_close( $ch ); if (!$response ) { throw new Exception( "Error retrieving access token: " . curl_error($ch)); } $jsonResponse = json_decode($response ); if ( isset( $jsonResponse->access_token) ) { $accessToken = $jsonResponse->access_token; } } catch( Exception $e) { throw new Exception($e->getMessage(), 1); } return $accessToken; } /** * get the PayPal user profile, decoded * @param string $accessToken * @return object */ public function acquire_paypal_user_profile($accessToken ) { try { if($this->_sanbox_flag) $url = $this->_acquire_user_profile_sandbox_url . $accessToken; else $url = $this->_acquire_user_profile_live_url . $accessToken; $ch = curl_init( $url ); $options = array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_SSL_VERIFYPEER => FALSE, //CURLOPT_SSLVERSION => 2 ); curl_setopt_array($ch, $options); $response = curl_exec($ch); $error = curl_error( $ch); curl_close( $ch ); if (!$response ) { return false; } return json_decode($response); } catch( Exception $e ) { return false; } } } ?>
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
相關(guān)文章
PHP使用FFmpeg獲取視頻播放總時(shí)長(zhǎng)與碼率等信息
這篇文章給大家分享了利用PHP中的FFmpeg讀取視頻播放時(shí)長(zhǎng)與碼率等信息,有需要的朋友們可以參考借鑒。下面來(lái)一起看看吧。2016-09-09PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十六)
這篇文章主要介紹了PHP網(wǎng)頁(yè)游戲Xnova(ogame)源碼解讀的攻擊任務(wù)頁(yè)面的代碼流程,需要的朋友可以參考下2014-06-06Yii1.0 不同頁(yè)面多個(gè)驗(yàn)證碼的使用實(shí)現(xiàn)
這篇文章主要介紹了Yii1.0 不同頁(yè)面多個(gè)驗(yàn)證碼的使用實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03PHP實(shí)現(xiàn)留言板功能的詳細(xì)代碼
這篇文章主要為大家詳細(xì)介紹了PHP實(shí)現(xiàn)留言板功能的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03WordPress中設(shè)置Post Type自定義文章類(lèi)型的實(shí)例教程
這篇文章主要介紹了WordPress中設(shè)置Post Type自定義文章類(lèi)型的實(shí)例教程,后臺(tái)文章類(lèi)型的設(shè)置是WordPress的一大特色,然而自帶的文章類(lèi)型往往并不夠用,需要的朋友可以參考下2016-05-05