PHP接入支付寶教程

0.準(zhǔn)備工作

支付寶賬號驗(yàn)證

簽約接口

私鑰生成

1. 拼湊訂單

1.1 拼裝訂單

1.2 私鑰簽名

2 服務(wù)器端處理

2.1 支付寶處理流程圖

主要參考文檔

3 代碼實(shí)現(xiàn)

3.1 開啟CURL

3.2 填寫配置

3.3 訂單簽名

4 驗(yàn)簽

1.1 私鑰生成

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

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

在簽約管理處瘾英,點(diǎn)擊查看PID | Key颂暇。輸入支付密碼之后既可以查看相關(guān)的公鑰。

need-to-insert-img

上傳公鑰

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

注意

此處是上傳密鑰,而不是上傳私鑰煌集,私鑰千萬不能泄露出去,切記碉钠,在這里把自己的公鑰公布給支付寶就行卷拘,讓支付寶能夠驗(yàn)證你的簽名。

要在合作伙伴密鑰管理這里添加公鑰污筷。而不是下面的開放平臺密鑰管理的地方

need-to-insert-img

上傳公鑰

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

2.1支付寶處理流程圖

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

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

數(shù)據(jù)交互流程圖

簡單來說

客戶端發(fā)起支付請求乍赫,在自己的服務(wù)器端生成訂單并且使用私鑰給訂單簽名

客戶端使用拿到服務(wù)器端生成的字符串(訂單字符串+簽名字符串)交給支付寶SDK進(jìn)行支付

支付寶會回調(diào)我們的服務(wù)器端雷厂,根據(jù)訂單信息中傳遞的回調(diào)地址來訪問我們的服務(wù)器,并且將訂單信息和支付寶的簽名字符串發(fā)送過來改鲫,我們可以在這個(gè)時(shí)候驗(yàn)證支付是否成功。

3 代碼實(shí)現(xiàn)

根據(jù)上面的流程寫具體代碼即可稽亏。

首先導(dǎo)入支付寶的PHP SDK缕题,下載地址

在支付寶文檔中心下載移動支付(SDK&DEMO下載

解壓之后打開服務(wù)端demo->readme.txt。幾乎所有的東西都在這個(gè)文檔里了避除。

3.1 開啟CURL

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

2诬辈、需要配置的文件是:

alipay.config.php

key文件夾```

alipay.config.php.打開這個(gè)文件之后荐吉,里面所有的配置信息都有相應(yīng)的中文注釋,按照注釋填寫即可穿撮。

3.3 訂單簽名

首先在你的支付類中引入lib\alipay_notify.class.php文件痪欲。

簽名實(shí)現(xiàn)工具,需要的時(shí)候調(diào)用這個(gè)方法业踢,傳遞需要參數(shù),然后將字符串返回給客戶端即可瞬沦。

//調(diào)用方傳遞subject负蠕,body,price即可獲取到簽名后的字符串遮糖,contentId在簽名過程中用不到,可以根據(jù)具體業(yè)務(wù)刪除或保留? ? publicfunctionaliSignUtil($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');//支付寶提供的簽名方法,第二個(gè)參數(shù)是私鑰地址$history['sign'] = str_replace("\"","", $data);? ? ? ? $order['sign'] ='"'. urlencode($data) .'"';? ? ? ? $order['sign_type'] ='"RSA"';//訂單信息處理成字符串$result = createLinkstring($order);//這里將history訂單信息保存到了數(shù)據(jù)庫文黎,方便回調(diào)的時(shí)候根據(jù)訂單號查詢出是哪一個(gè)用戶產(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)用支付寶進(jìn)行支付劳闹。returnhtml_entity_decode($result);? ? }

4驗(yàn)簽

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

$order = $_POST;? ? ? ? $sign = $order;//去除簽名和簽名方式以及controller和action本涕,保留待簽名信息unset($sign['sign']);unset($sign['sign_type']);unset($sign['c']);unset($sign['a']);? ? ? ? ksort($sign);? ? ? ? $sign = createLinkstring($sign);//驗(yàn)證支付寶簽名$result =false;? ? ? ? $result = rsaVerify(? ? ? ? ? ? $sign,? ? ? ? ? ? AliPay . DIRECTORY_SEPARATOR .'key'. DIRECTORY_SEPARATOR .'alipay_public_key.pem',? ? ? ? ? ? $order['sign']);? ? ? ? $db =newMedoo();//在訂單歷史表中按支付寶回調(diào)訂單號查詢出訂單业汰,判斷狀態(tài)$result = $db->select('alipay','*', ["out_trade_no"=> $order["out_trade_no"]])[0];//重復(fù)驗(yàn)證if($result['status'] =='1') {echo'success';exit();? ? ? ? }if($result && $order['trade_status'] =='TRADE_SUCCESS') {//驗(yàn)證支付寶簽名成功,并且是支付成功的回調(diào)//這里可以確定是支付寶進(jìn)行的回調(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氛濒,未進(jìn)行完整測試,主要提供一種思路

小禮物走一走鹅髓,來簡書關(guān)注我

作者:Swerve

鏈接:http://www.reibang.com/p/0e2c44bb221e

來源:簡書

著作權(quán)歸作者所有舞竿。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處窿冯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市醒串,隨后出現(xiàn)的幾起案子执桌,更是在濱河造成了極大的恐慌,老刑警劉巖芜赌,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仰挣,死亡現(xiàn)場離奇詭異,居然都是意外死亡缠沈,警方通過查閱死者的電腦和手機(jī)膘壶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洲愤,“玉大人颓芭,你說我怎么就攤上這事〖泶停” “怎么了亡问?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肛宋。 經(jīng)常有香客問我州藕,道長,這世上最難降的妖魔是什么酝陈? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任床玻,我火速辦了婚禮,結(jié)果婚禮上后添,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好遇西,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布馅精。 她就那樣靜靜地躺著,像睡著了一般粱檀。 火紅的嫁衣襯著肌膚如雪洲敢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天茄蚯,我揣著相機(jī)與錄音压彭,去河邊找鬼。 笑死渗常,一個(gè)胖子當(dāng)著我的面吹牛壮不,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播皱碘,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼询一,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了癌椿?” 一聲冷哼從身側(cè)響起健蕊,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踢俄,沒想到半個(gè)月后缩功,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡都办,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年嫡锌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脆丁。...
    茶點(diǎn)故事閱讀 40,769評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡世舰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出槽卫,到底是詐尸還是另有隱情跟压,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布歼培,位于F島的核電站震蒋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏躲庄。R本人自食惡果不足惜查剖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望噪窘。 院中可真熱鬧笋庄,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至静暂,卻和暖如春济丘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背洽蛀。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工摹迷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人郊供。 一個(gè)月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓峡碉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親颂碘。 傳聞我的和親對象是個(gè)殘疾皇子异赫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評論 2 361

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