支付寶 app應用 受權 php + APICloud

app應用受權 怎麼處理 php

支付寶官方文檔 https://docs.open.alipay.com/...前端

APICloud 文檔 https://docs.apicloud.com/Cli...算法

根據文檔整理了 php 的代碼 僅供參考 json

獲取 受權數據信息  api

極簡版受權請求參數和返回app

apiname=com.alipay.account.auth&app_id=2016051801417322&app_name=mc&auth_type=AUTHACCOUNT&biz_type=openservice&method=alipay.open.auth.sdk.code.get&pid=2088221932028920&product_id=APP_FAST_LOGIN&scope=auth_user&sign_type=RSA&target_id=61ef37122e104d148c855d14e9bf90e2&sign=m6K7Dz4CxPAgLn2uwIjGSmgRcOBYtHcqaYqLc85/C6PCqoIu6tUHDmx5/hb0xy+dMCdQoFcQWKRGzBl040g/6avD/PhOUSUi9Cmtd2HxSzEEjk7LuFn9QrpAmcM7/tub+K/G/2rQp9ce8FY2RCbJ/sFDA09M5B+2gqzy9Qkc5fE=post

/**
     *獲取受權數據
     */
    public function get_auth_data(){
        $appid =  '1111'; // 商戶帳號appid
        $sign_type = 'RSA2';
        $targetId = mt_rand(000000,999999);//此處隨機獲取
        $data = [
            'apiname'=>'com.alipay.account.auth',
            'method'=>'alipay.open.auth.sdk.code.get',
            'app_id'=>$appid,//支付寶分配給開發者的應用ID
            'app_name'=>'mc',
            'biz_type'=>'openservice',
            'pid'=>'11111',//簽約的支付寶帳號對應的支付寶惟一用戶號,以2088開頭的16位純數字組成 登陸你的支付寶 用戶信息中 能夠找到
            'product_id'=>'APP_FAST_LOGIN', //標識受權類型,取值範圍:AUTHACCOUNT表明受權;LOGIN表明登陸
            'scope'=>'kuaijie',
            'target_id'=>$targetId, //商戶標識該次用戶受權請求的ID,該值在商戶端應保持惟一
            'auth_type'=>'AUTHACCOUNT',//受權類型  AUTHACCOUNT:受權 LOGIN:登陸
            'sign_type'=>$sign_type,//簽名算法類型
        ];
        //讀取配置信息
        $aop = new \AopClient;
        $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
        $aop->appId = '1111111';//支付寶分配給開發者的應用ID
        $aop->rsaPrivateKey = '1111111';//支付寶私鑰
        $aop->format = "json";
        $aop->charset = "UTF-8";
        $aop->signType = "RSA2";
        $aop->alipayrsaPublicKey = '1111111';//支付寶公鑰
        $sign =  $aop->generateSign($data,$sign_type);//生成sing 此處用的 支付寶 demo封裝好的
        $sign = urlencode($sign);
        ksort($data);
        $str='';
        foreach($data as $k=>$v) {
            $str.=$k.'='.$v.'&';
        }
        $str.= 'sign='.$sign;
       /* var_dump($str);
        exit;*/
        $str.= 'sign='.$sign;
       /* var_dump($str);
        exit;*/
        return $str;//返給前端 去作受權處理哦!
    }

若是前端 不用上面那種 提供第二種方案ui

/**
     *獲取受權數據
     *
     */
    public  function get_data(){
        $targetId = mt_rand(000000,999999);
        $data = [
            'appId'=>'1111', // 商戶帳號appid
            'targetId'=>$targetId , //商戶標識
            'partner'=>'1111',//支付寶惟一用戶號
            'rsaPriKey'=>'1111',//商戶私鑰
            'authType'=>'AUTHACCOUNT',//AUTHACCOUNT:受權 LOGIN:登陸
            'rsa2'=>true, 簽名方式
        ];
        return  $data;
    }

前端 受權成功 會獲取到 這樣一個回調 數據url

返回結果樣例code

resultStatus=9000
     memo="處理成功"
     result="success=true&auth_code=d9d1b5acc26e461dbfcb6974c8ff5E64&result_code=200 &user_id=2088003646494707"

而後就 是 調用
alipay.system.oauth.token

獲取受權令牌接口 使用文檔 https://docs.open.alipay.com/...

function  auth_user($uid,$authorization_code=''){
 
            
            $config = $config->toArray()[0];
            $aop = new  \AopClient ();
            $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
            $aop->appId = '111111';//支付寶分配給開發者的應用ID
            $aop->rsaPrivateKey = '11111'; //支付寶私鑰
            $aop->alipayrsaPublicKey= '11111'; //支付寶公鑰
            $aop->apiVersion = '1.0';
            $aop->signType = 'RSA2';
            $aop->postCharset='UTF-8';
            $aop->format='json';
            $request = new \AlipaySystemOauthTokenRequest();
            $request->setGrantType("authorization_code");// 值爲authorization_code時,表明用code換取;值爲refresh_token時,表明用refresh_token換取 
            $request->setCode($authorization_code);//前端返回數據 包含的 受權碼,用戶對應用受權後獲得。
//          $request->setRefreshToken("12121212121");//刷刷新令牌,上次換取訪問令牌時獲得。見出參的refresh_token字段  與code驗證 二選一
            $result = $aop->execute($request);
           $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
            $resultCode = $result->$responseNode->code;
            if(!empty($resultCode)&&$resultCode == 10000){
                $alipay_user_id = $result['user_id'];//獲取用戶惟一支付寶標識
                return self::memeber_update($uid,$alipay_user_id);//保存到你的數據裏 
            } else {
                return  false;
            }
        }

而後其餘的就是你自由發揮了

追加一下 研究了一下網頁版的 只不h5 受權頁只能在支付寶客戶端裏使用,不然會報錯

官方文檔 https://docs.alipay.com/fw/ap...

一樣 能夠獲取 auth_code

/*
     *獲取受權數據
     *
     */
    public  function get_auth_url(){
        $appid = '11111' // 開發者應用的app_id
        $redirect_uri = 'http://www.baidu.com/api/authnotify';//回調頁面,是 通過轉義 的url連接(url必須以http或者https開頭),好比:http%3A%2F%2Fexample.com
在請求以前,開發者須要先到開發者中心對應應用內,配置受權回調地址。 
        $redirect_uri = UrlEncode($redirect_uri);
        $application_type = 'MOBILEAPP';//
        $url ="https://openauth.alipay.com/oauth2/appToAppBatchAuth.htm?app_id={$appid}&application_type={$application_type}&redirect_uri={$redirect_uri}";
        return  $url;
    }

在回調地址頁面 獲取下面的 結果

{
    "alipay_system_oauth_token_response": {
        "access_token": "111",
        "user_id": "111",
        "alipay_user_id": "1111",
        "expires_in": 300,
        "re_expires_in": 300,
        "refresh_token": "11"
    },
    "sign": "1111"
}
相關文章
相關標籤/搜索