支付寶支付(APP支付)

1,申請流程

首先必須通知客戶先申請支付寶商家賬號荞彼,然后認證。地址:https://open.alipay.com/platform/home.htm

[圖片上傳失敗...(image-a11c37-1595316808224)]

這里都是需要客戶操作的抬伺,客戶點擊支付接入后捉撮,會有個認證簽約頁面彤断,簽約完之后野舶,會生成應(yīng)用唯一標識(APPID)。應(yīng)用創(chuàng)建完成后宰衙,系統(tǒng)會自動跳轉(zhuǎn)到應(yīng)用詳情頁面平道。然后可以點擊 添加功能 來添加App支付功能。添加功能完后,我的應(yīng)用列表就會顯示添加的應(yīng)用供炼,即支付寶App支付一屋。這一步我們只需要等待客戶申請就好窘疮,什么也不用做。詳細流程參加支付寶官方文檔:https://docs.open.alipay.com/... 這里面唯一需要開發(fā)者做的就是生成密鑰這一步冀墨。

2闸衫,支付寶配置

[圖片上傳失敗...(image-904263-1595316808224)]
說明:

接口加簽方式 詳細操作見第三步

IP白名單 安全性考慮,添加上IP地址

其他的可以不用設(shè)置

3诽嘉,公鑰密鑰生成

具體教程官網(wǎng)都有蔚出,簡單的說明一下,上傳應(yīng)用公鑰去并獲取支付寶公鑰虫腋。https://docs.open.alipay.com/291/105972

4骄酗,SDK開發(fā)者后臺接入

在開始后臺代碼前,我們必須有3個參數(shù)悦冀,開發(fā)者私鑰趋翻、支付寶公鑰APPID盒蟆。 這里的開發(fā)者私鑰也叫應(yīng)用私鑰踏烙。沒有這3個參數(shù),就沒法喚起支付寶支付接口!!!

準備好后可以下載支付寶的官方demo代碼參考茁影。https://docs.open.alipay.com/54/106370

[圖片上傳失敗...(image-90354-1595316808224)]

5宙帝,核心步驟代碼(支付寶APP支付)

說明:參數(shù)定義

    const APPID = '2021******';
    //開發(fā)者私鑰去頭去尾去回車,一行字符串
    const RSA_PRIVATE_KEY = 'MIIEpQIBAA*******';
    //支付寶公鑰(上傳開發(fā)者公鑰(又叫應(yīng)用公鑰)后才能生成)
    const ALIPAY_RSA_PUBLIC_KEY = 'MIIBIjABAA*******;

說明:前端調(diào)用的方法

    /**
     *支付方法募闲,調(diào)用支付寶接口成功后步脓,會返回給前端一個長串的參數(shù)字符串。前端利用它喚起支付寶
     */
    public function paytoOffi()
    {
        // 這里接收前端的參數(shù)
        // 數(shù)據(jù)庫生成訂單
        // 下邊是模擬的數(shù)據(jù)(訂單號浩螺、主題靴患、金額、備注)
        $out_trade_no = time();
        $subject = time();
        $total_amount = 1;
        $body = '備注';
        
        $res = $this->getAlipayMsg($body,$subject,$out_trade_no,$total_amount);
        return $res;    //必須是json格式
    }

說明:getAlipayMsg方法

    /**
     * 調(diào)用支付寶接口方法
     * @method
     * @param $body 訂單描述
     * @param $subject  訂單標題
     * @param $out_trade_no 訂單號
     * @param $amount  價格
     */
    private function getAlipayMsg($body, $subject, $out_trade_no, $amount)
    {
        vendor('alipay.aop.AopClient');
        vendor('alipay.aop.request.AlipayTradeAppPayRequest');

        $aop = new \AopClient();
        $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do"; //這里是寫死的要出,支付寶網(wǎng)關(guān)地址
        $aop->appId = self::APPID;
        $aop->rsaPrivateKey = self::RSA_PRIVATE_KEY;
        $aop->format = "json";
        $aop->charset = "UTF-8";
        $aop->signType = "RSA2";
        $aop->alipayrsaPublicKey = self::ALIPAY_RSA_PUBLIC_KEY;
        //實例化具體API對應(yīng)的request類,類名稱和接口名稱對應(yīng),當(dāng)前調(diào)用接口名稱:alipay.trade.app.pay
        $request = new \AlipayTradeAppPayRequest();

        //SDK已經(jīng)封裝掉了公共參數(shù)鸳君,這里只需要傳入業(yè)務(wù)參數(shù)
        $bizcontent = "{\"body\":\"{$body}\","http://支付商品描述
            . "\"subject\":\"{$subject}\","http://支付商品的標題
            . "\"out_trade_no\":\"{$out_trade_no}\","http://商戶網(wǎng)站唯一訂單號
            . "\"timeout_express\":\"60m\","http://該筆訂單允許的最晚付款時間,逾期將關(guān)閉交易
            . "\"total_amount\":\"{$amount}\","http://訂單總金額患蹂,單位為元或颊,精確到小數(shù)點后兩位,取值范圍[0.01,100000000]
            . "\"product_code\":\"QUICK_MSECURITY_PAY\""
            . "}";

        $request->setNotifyUrl('http://text.baidu.com/api/Alipay/notify');//你自己的異步地址传于,必須寫全囱挑,而且不能有參數(shù)
        $request->setBizContent($bizcontent);
        //這里和普通的接口調(diào)用不同,使用的是sdkExecute
        $response = $aop->sdkExecute($request);
        file_put_contents('d.txt',json_encode($response),FILE_APPEND);  //寫入txt支付寶的返回數(shù)據(jù)
        return $response;
    }

說明:異步回調(diào)方法

    /**
     * 用戶消費異步通知服務(wù)器方法
     */
    public function notify()
    {
        $arr = $_POST;
        file_put_contents('d.txt',json_encode($arr),FILE_APPEND);   //寫入txt支付寶的返回數(shù)據(jù)
        //驗證簽名
        $aop = new \AopClient();
        $aop->alipayrsaPublicKey = self::ALIPAY_RSA_PUBLIC_KEY;
        $flag = $aop->rsaCheckV1($arr, null, "RSA2");

        if ($flag) {
            // 商戶訂單號
            $out_trade_no = $arr['out_trade_no'];
            // 支付寶交易號
            $trade_no = $arr['trade_no'];
            // 交易狀態(tài)
            $trade_status = $arr['trade_status'];
            // 交易金額
            $total_amount = $arr['total_amount'];

            if ($arr['trade_status'] == 'TRADE_SUCCESS'
                || $arr['trade_status'] == 'TRADE_FINISHED') { //處理交易完成或者支付成功的通知
                //自己的業(yè)務(wù)邏輯,比如修改訂單為已支付

                die('success');
                //必須有這句,echo 'success'也可以沼溜,否則支付寶會以為支付沒成功平挑,而在一天內(nèi)連續(xù)調(diào)用異步接口,容易出錯
            }
        }
    }

6,踩過的坑

  • 首先前臺調(diào)支付接口paytoOffi通熄,然后這個方法就會調(diào)getAlipayMsg方法唆涝,即調(diào)支付寶接口的方法,這4個參數(shù)描述唇辨、標題廊酣、訂單號、價格后3個是必填的助泽。描述可以不填啰扛,這個酌情修改。然后調(diào)接口嗡贺,支付寶會返回請求字符串隐解,即喚起支付寶軟件的一長串字符串,這里有個大坑诫睬,官方文檔上說直接echo 給前臺就行煞茫,但其實應(yīng)該轉(zhuǎn)成json格式返給前臺,否則會報100XX錯誤摄凡,即參數(shù)格式不正確续徽。下面是官方的坑教程截圖:

[圖片上傳失敗...(image-947f2e-1595316808224)]

  • 引入的問題,將下載的demo放在vendor目錄下亲澡,vendor('alipay.aop.AopClient');引入

  • php對接app支付寶支付出錯Cannot redeclare Decrypt()
    報錯原因:alipaySDK中定義的Encrypt()/Decrypt()函數(shù)與Laravel中定義的Encrypt()/Decrypt()函數(shù)重名了钦扭。

    解決辦法:修改alipaySDK中定義的函數(shù)名稱、修改引用的函數(shù)名稱床绪。

    解決步驟:在官方給的SDK中客情,一共有需要修改三個文件中的內(nèi)容:aop/AopEncrypt.phpaop/AopClient.php癞己、lotusphp_runtime/Cookie/Cookie.php 在文件中查找encrypt/decrypt替換為alipayEncrypt/alipayDecrypt即可膀斋。

7,額外鏈接

https://segmentfault.com/a/1190000020056817?utm_source=tag-newest

https://my.oschina.net/marhal/blog/1787739?p=1

https://www.cnblogs.com/yangzailu/p/11752381.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末痹雅,一起剝皮案震驚了整個濱河市仰担,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绩社,老刑警劉巖摔蓝,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異愉耙,居然都是意外死亡项鬼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門劲阎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸠真,你說我怎么就攤上這事悯仙×湔保” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵锡垄,是天一觀的道長沦零。 經(jīng)常有香客問我,道長货岭,這世上最難降的妖魔是什么路操? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮千贯,結(jié)果婚禮上屯仗,老公的妹妹穿的比我還像新娘。我一直安慰自己搔谴,他們只是感情好魁袜,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著敦第,像睡著了一般峰弹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芜果,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天鞠呈,我揣著相機與錄音,去河邊找鬼右钾。 笑死蚁吝,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的霹粥。 我是一名探鬼主播灭将,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼后控!你這毒婦竟也來了庙曙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤浩淘,失蹤者是張志新(化名)和其女友劉穎捌朴,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體张抄,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡砂蔽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了署惯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片左驾。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诡右,到底是詐尸還是另有隱情安岂,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布帆吻,位于F島的核電站域那,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏猜煮。R本人自食惡果不足惜次员,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望王带。 院中可真熱鬧淑蔚,春花似錦、人聲如沸辫秧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盟戏。三九已至绪妹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柿究,已是汗流浹背邮旷。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蝇摸,地道東北人婶肩。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像貌夕,于是被迫代替她去往敵國和親律歼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354