PHP接入支付寶教程

0.準備工作
支付寶賬號驗證
簽約接口
私鑰生成

1. 拼湊訂單

1.1 拼裝訂單

1.2 私鑰簽名

2 服務(wù)器端處理

2.1 支付寶處理流程圖

主要參考文檔

3 代碼實現(xiàn)

3.1 開啟CURL

3.2 填寫配置

3.3 訂單簽名

4 驗簽

1.1 私鑰生成

私鑰可以使用支付寶提供的RSA私鑰生成工具

1.2 將生成的公鑰上傳到支付寶

在簽約管理處简肴,點擊查看PID | Key晃听。輸入支付密碼之后既可以查看相關(guān)的公鑰。

上傳公鑰

之后再添加密鑰處復(fù)制自己的公鑰(我的已經(jīng)添加過了,此處顯示為查看)

注意

  1. 此處是上傳密鑰能扒,而不是上傳私鑰佣渴,私鑰千萬不能泄露出去,切記初斑,在這里把自己的公鑰公布給支付寶就行辛润,讓支付寶能夠驗證你的簽名。
  2. 要在合作伙伴密鑰管理這里添加公鑰见秤。而不是下面的開放平臺密鑰管理的地方
上傳公鑰

2. 服務(wù)器端處理

2.1 支付寶處理流程圖

業(yè)務(wù)流程圖


業(yè)務(wù)流程圖
業(yè)務(wù)流程圖
數(shù)據(jù)交互流程圖
數(shù)據(jù)交互流程圖

簡單來說

  1. 客戶端發(fā)起支付請求砂竖,在自己的服務(wù)器端生成訂單并且使用私鑰給訂單簽名
  2. 客戶端使用拿到服務(wù)器端生成的字符串(訂單字符串+簽名字符串)交給支付寶SDK進行支付
  3. 支付寶會回調(diào)我們的服務(wù)器端,根據(jù)訂單信息中傳遞的回調(diào)地址來訪問我們的服務(wù)器鹃答,并且將訂單信息和支付寶的簽名字符串發(fā)送過來乎澄,我們可以在這個時候驗證支付是否成功。

3 代碼實現(xiàn)

根據(jù)上面的流程寫具體代碼即可测摔。
首先導(dǎo)入支付寶的PHP SDK三圆,下載地址
在支付寶文檔中心下載移動支付(SDK&DEMO下載
解壓之后打開服務(wù)端demo->readme.txt。幾乎所有的東西都在這個文檔里了避咆。

3.1 開啟CURL

1舟肉、必須開啟curl服務(wù)
(1)使用Crul需要修改服務(wù)器中php.ini文件的設(shè)置,找到php_curl.dll去掉前面的";"即可
(2)文件夾中cacert.pem文件請務(wù)必放置到商戶網(wǎng)站平臺中(如:服務(wù)器上)查库,并且保證其路徑有效路媚,提供的代碼demo中的默認路徑是當前文件夾下——getcwd().'\\cacert.pem'```
### 3.2 填寫配置

2、需要配置的文件是:
alipay.config.php
key文件夾```
alipay.config.php.打開這個文件之后樊销,里面所有的配置信息都有相應(yīng)的中文注釋整慎,按照注釋填寫即可。

3.3 訂單簽名

首先在你的支付類中引入lib\alipay_notify.class.php文件围苫。
簽名實現(xiàn)工具裤园,需要的時候調(diào)用這個方法,傳遞需要參數(shù)剂府,然后將字符串返回給客戶端即可拧揽。

//調(diào)用方傳遞subject,body腺占,price即可獲取到簽名后的字符串淤袜,contentId在簽名過程中用不到,可以根據(jù)具體業(yè)務(wù)刪除或保留    
public function aliSignUtil($subject, $body, $price, $contentId)
    {
        $order['partner'] = '"商戶號"';
        $order['seller_id'] = '"商戶Id"';
        $order['out_trade_no'] = '"' . $this->getOrderNo() . '"';//獲取訂單號衰伯,保證唯一
        $order['subject'] = '"' . $subject . '"';
        $order['body'] = '"' . $body . '"';
        $order['total_fee'] = '"' . $price . '"';
        $order['notify_url'] = '"回調(diào)地址"';//支付寶支付成功之后的回調(diào)地址铡羡,必須公網(wǎng)可以訪問
        $order['service'] = '"mobile.securitypay.pay"';
        $order['payment_type'] = '"1"';
        $order['_input_charset'] = '"utf-8"';
        $order['it_b_pay'] = '"30m"';
        $order['return_url'] = '"m.alipay.com"';
        //需要加簽的內(nèi)容處理成字符串
        $data = createLinkstring($order);//支付寶提供的方法
        //加簽
        $data = rsaSign($data, AliPay . DIRECTORY_SEPARATOR . 'key' . DIRECTORY_SEPARATOR . 'rsa_private_key.pem');//支付寶提供的簽名方法,第二個參數(shù)是私鑰地址
        $history['sign'] = str_replace("\"", "", $data);
        $order['sign'] = '"' . urlencode($data) . '"';
        $order['sign_type'] = '"RSA"';
        //訂單信息處理成字符串
        $result = createLinkstring($order);
        //這里將history訂單信息保存到了數(shù)據(jù)庫,方便回調(diào)的時候根據(jù)訂單號查詢出是哪一個用戶產(chǎn)生的訂單。
        $history['out_trade_no'] = str_replace("\"", "", $order['out_trade_no']);
        $history['total_fee'] = str_replace("\"", "", $order['total_fee']);
        $history['contentId'] = $contentId;
        $this->saveOrder($history);//訂單歷史保存到數(shù)據(jù)庫
        //返回訂單信息,客戶端可以根據(jù)result來調(diào)用支付寶進行支付螟够。
        return html_entity_decode($result);
    }

4驗簽

根據(jù)上面加簽時候填寫的回調(diào)地址读慎,寫支付寶驗簽代碼

$order = $_POST;
        $sign = $order;
        //去除簽名和簽名方式以及controller和action教翩,保留待簽名信息
        unset($sign['sign']);
        unset($sign['sign_type']);
        unset($sign['c']);
        unset($sign['a']);
        ksort($sign);
        $sign = createLinkstring($sign);
        //驗證支付寶簽名
        $result = false;
        $result = rsaVerify(
            $sign,
            AliPay . DIRECTORY_SEPARATOR . 'key' . DIRECTORY_SEPARATOR . 'alipay_public_key.pem',
            $order['sign']);
        $db = new Medoo();
        //在訂單歷史表中按支付寶回調(diào)訂單號查詢出訂單,判斷狀態(tài)
        $result = $db->select('alipay', '*', ["out_trade_no" => $order["out_trade_no"]])[0];
        //重復(fù)驗證
        if ($result['status'] == '1') {
            echo 'success';
            exit();
        }
        if ($result && $order['trade_status'] == 'TRADE_SUCCESS') {//驗證支付寶簽名成功贪壳,并且是支付成功的回調(diào)
          //這里可以確定是支付寶進行的回調(diào)饱亿,并且是第一次成功的回調(diào),在這里寫支付成功之后的邏輯就好
            $result['status'] = '1';
            $num = $db->update('alipay', $result, ["out_trade_no" => $order["out_trade_no"]]);
            //添加購買歷史
            $this->addBuyHistory("購買內(nèi)容", 100, $db, $result['userId']);
            //購買內(nèi)容
            if (!empty($result['contentId'])) {
                $buy['contentId'] = $result['contentId'];
                $buy['userId'] = $result['userId'];
                $num = $db->insert('contentsubs', $buy);
            }
            //處理完成后輸出succes給支付寶
            echo 'success';
        }

自此闰靴,支付寶完成了一次完整的支付彪笼。

demo,未進行完整測試蚂且,主要提供一種思路

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末配猫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子杏死,更是在濱河造成了極大的恐慌泵肄,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淑翼,死亡現(xiàn)場離奇詭異腐巢,居然都是意外死亡,警方通過查閱死者的電腦和手機玄括,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門冯丙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人遭京,你說我怎么就攤上這事胃惜。” “怎么了哪雕?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵船殉,是天一觀的道長。 經(jīng)常有香客問我斯嚎,道長利虫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任孝扛,我火速辦了婚禮列吼,結(jié)果婚禮上幽崩,老公的妹妹穿的比我還像新娘苦始。我一直安慰自己,他們只是感情好慌申,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布陌选。 她就那樣靜靜地躺著理郑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咨油。 梳的紋絲不亂的頭發(fā)上您炉,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機與錄音役电,去河邊找鬼赚爵。 笑死,一個胖子當著我的面吹牛法瑟,可吹牛的內(nèi)容都是我干的冀膝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼霎挟,長吁一口氣:“原來是場噩夢啊……” “哼窝剖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起酥夭,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赐纱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后熬北,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疙描,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年讶隐,在試婚紗的時候發(fā)現(xiàn)自己被綠了淫痰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡整份,死狀恐怖待错,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烈评,我是刑警寧澤火俄,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站讲冠,受9級特大地震影響瓜客,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜竿开,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一谱仪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧否彩,春花似錦疯攒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枚尼。三九已至,卻和暖如春砂吞,著一層夾襖步出監(jiān)牢的瞬間署恍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工蜻直, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盯质,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓概而,卻偏偏與公主長得像唤殴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子到腥,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 支付寶集成過程詳解——運行DEMO 前言朵逝,夢想是需要堅持的,在路上乡范,一路前行配名。加油。 這兩天軟件需要集成支付寶了晋辆,...
    改昵稱已被占用閱讀 19,059評論 2 39
  • 支付寶簡介文檔 (適用于ydm-java接口與后臺瓶佳,如有誤入芋膘,但愿也能給您帶來幫助) 此文檔寫于2017年3月,只...
    隔壁付叔叔閱讀 17,075評論 3 19
  • 自己總結(jié)的微信支付寶支付流程和注意點: 準備工作: 需要公司的營業(yè)執(zhí)照霸饲,稅務(wù)信息为朋,等老板的身份證信息等,我記得厚脉,用...
    Www劉閱讀 18,569評論 2 50
  • 1习寸、App支付簡介 買家在手機、掌上電腦等無線設(shè)備的應(yīng)用程序內(nèi)傻工,可通過支付寶進行付款購買特定服務(wù)或商品霞溪,資金即時到...
    PZcoder閱讀 44,024評論 5 22
  • 準備工作: 需要公司的營業(yè)執(zhí)照,稅務(wù)信息中捆,等老板的身份證信息等鸯匹,我記得,用這些材料泄伪,去支付寶注冊一個商家賬戶(審核...
    Hevin_Chen閱讀 6,809評論 0 9