PHP接入支付寶接口失效流程詳解
最近在寫(xiě)個(gè)需要簡(jiǎn)單支付的小項(xiàng)目,用到了支付寶接口,現(xiàn)已完成。把php接入支付寶的流程寫(xiě)在這里供像我一樣的小白參考。
1.首先要有一個(gè)創(chuàng)建一個(gè)應(yīng)用(選好自己想要的功能,關(guān)于支付的功能,貌似都需要簽約)
2.下載SDK&Dome網(wǎng)址
我選擇的是MD5簽名方式,下面紅框內(nèi)就是做好的php Demo
- lib文件很重要,是整個(gè)接口的核心類文件;
- alipay.config.php是相關(guān)參數(shù)的配置文件
- alipayapi.php 是支付寶接口入口文件
- notify_url.php 是服務(wù)器異步通知頁(yè)面文件;
- return_url.php 是頁(yè)面跳轉(zhuǎn)同步通知文件;
3.打開(kāi)alipay.config.php
4.配置完成后這個(gè)小例子就能直接訪問(wèn)了
通過(guò)這個(gè)例子,我們就能靈活運(yùn)用了 開(kāi)發(fā)文檔:
https://doc.open.alipay.com/docs/doc.htm?treeId=203&articleId=105288&docType=1
嵌入thinkphp3.2.3 我保留了
重新命名為
分別給這五個(gè)文件加上命名空間
這四個(gè)文件的命名空間改為
Alipay.class.php 有改動(dòng)
?php namespace Extend\Alipay; class Alipay { public function pay($alipay_config,$args){ /**************************請(qǐng)求參數(shù)**************************/ //支付類型 $payment_type = "1"; //必填,不能修改 //服務(wù)器異步通知頁(yè)面路徑 $notify_url = $args['notify_url']; //需http://格式的完整路徑,不能加?id=123這類自定義參數(shù) //頁(yè)面跳轉(zhuǎn)同步通知頁(yè)面路徑 $return_url = $args['return_url']; //需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),不能寫(xiě)成http://localhost/ //商戶訂單號(hào) $out_trade_no = $args['out_trade_no']; //商戶網(wǎng)站訂單系統(tǒng)中唯一訂單號(hào),必填 //訂單名稱 $subject = "測(cè)試"; //必填 //付款金額 $total_fee = $args['total']; //必填 //訂單描述 $body = "test"; //需以http://開(kāi)頭的完整路徑,例如:http://www.商戶網(wǎng)址.com/myorder.html //防釣魚(yú)時(shí)間戳 $anti_phishing_key = ""; //若要使用請(qǐng)調(diào)用類文件submit中的query_timestamp函數(shù) //客戶端的IP地址 $exter_invoke_ip = ""; //非局域網(wǎng)的外網(wǎng)IP地址,如:221.0.0.1 /************************************************************/ //構(gòu)造要請(qǐng)求的參數(shù)數(shù)組,無(wú)需改動(dòng) $parameter = array( "service" => "create_direct_pay_by_user", "partner" => trim($alipay_config['partner']), "seller_id" => trim($alipay_config['seller_id']), "payment_type" => $payment_type, "notify_url" => $notify_url, "return_url" => $return_url, "out_trade_no" => $out_trade_no, "subject" => $subject, "total_fee" => $total_fee, "body" => $body, "show_url" => $show_url, "anti_phishing_key" => $anti_phishing_key, "exter_invoke_ip" => $exter_invoke_ip, "_input_charset" => trim(strtolower($alipay_config['input_charset'])) ); //建立請(qǐng)求 $alipaySubmit = new lib\AlipaySubmit($alipay_config); $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "確認(rèn)"); echo $html_text; } }
在config.php配置文件里配置參數(shù)
然后新建控制器TextController.class.php
<?php namespace Home\Controller; use Think\Controller; use \Extend\Alipay as Alipays; class TextController extends Controller { public function index(){ $this->display(); } public function dobuy(){ $out_trade_no = date('YmdHis'); $baseurl = 'http://'.$_SERVER['HTTP_HOST']; $args = array( 'out_trade_no'=>$out_trade_no, 'notify_url'=> $baseurl.'/index.php/Home/Text/notifyurl.html', 'return_url'=> $baseurl.'/index.php/Home/Text/returnurl.html', 'total'=> $_POST['WIDtotal_fee'], ); $s = new Alipays\Alipay(); $s->pay(C('alipay'),$args); } // 同步跳轉(zhuǎn) public function returnurl(){ $alipay_config = C('alipay'); //計(jì)算得出通知驗(yàn)證結(jié)果 $alipayNotify = new Alipays\lib\AlipayNotify($alipay_config); $verify_result = $alipayNotify->verifyReturn(); if($verify_result) {//驗(yàn)證成功 //商戶訂單號(hào) $out_trade_no = $_GET['out_trade_no']; //支付寶交易號(hào) $trade_no = $_GET['trade_no']; //交易狀態(tài) $trade_status = $_GET['trade_status']; if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') { //交易成功 }else { echo "trade_status=".$_GET['trade_status']; } echo "驗(yàn)證成功<br />"; }else { //驗(yàn)證失敗 //如要調(diào)試,請(qǐng)看alipay_notify.php頁(yè)面的verifyReturn函數(shù) echo "驗(yàn)證失敗"; } } // 異步跳轉(zhuǎn) public function notifyurl(){ $alipay_config = C('alipay'); //計(jì)算得出通知驗(yàn)證結(jié)果 $alipayNotify = new Alipays\AlipayNotify($alipay_config); $verify_result = $alipayNotify->verifyNotify(); if($verify_result) {//驗(yàn)證成功 $out_trade_no = $_POST['out_trade_no']; //支付寶交易號(hào) $trade_no = $_POST['trade_no']; //交易狀態(tài) $trade_status = $_POST['trade_status']; if($_POST['trade_status'] == 'TRADE_FINISHED'||$_POST['trade_status'] == 'TRADE_SUCCESS') { //交易成功 } echo "success"; //請(qǐng)不要修改或刪除 } else { //驗(yàn)證失敗 echo "fail"; //調(diào)試用,寫(xiě)文本函數(shù)記錄程序運(yùn)行情況是否正常 //logResult("這里寫(xiě)入想要調(diào)試的代碼變量值,或其他運(yùn)行的結(jié)果記錄"); } } }
然后
這樣就成功完成簡(jiǎn)單的支付功能了
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- PHP封裝XML和JSON格式數(shù)據(jù)接口操作示例
- PHP調(diào)用全國(guó)天氣預(yù)報(bào)數(shù)據(jù)接口查詢天氣示例
- php的api數(shù)據(jù)接口書(shū)寫(xiě)實(shí)例(推薦)
- PHP實(shí)現(xiàn)chrome表單請(qǐng)求數(shù)據(jù)轉(zhuǎn)換為接口使用的json數(shù)據(jù)
- PHP實(shí)現(xiàn)騰訊短網(wǎng)址生成api接口實(shí)例
- PHP語(yǔ)言對(duì)接抖音快手小紅書(shū)視頻/圖片去水印API接口源碼
- PHP預(yù)定義接口——Iterator用法示例
- php與阿里云短信接口接入操作案例分析
- PHP開(kāi)發(fā)API接口簽名生成及驗(yàn)證操作示例
- PHP接口類(interface)的定義、特點(diǎn)和應(yīng)用示例
- 微信小程序開(kāi)發(fā)之獲取用戶手機(jī)號(hào)碼(php接口解密)
- PHP 對(duì)象接口簡(jiǎn)單實(shí)現(xiàn)方法示例
- PHP開(kāi)發(fā)api接口安全驗(yàn)證操作實(shí)例詳解
- 如何用PHP編寫(xiě)簡(jiǎn)單的api數(shù)據(jù)接口
相關(guān)文章
php下載遠(yuǎn)程大文件(獲取遠(yuǎn)程文件大小)的實(shí)例
下面小編就為大家?guī)?lái)一篇php下載遠(yuǎn)程大文件(獲取遠(yuǎn)程文件大小)的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06php同時(shí)使用session和cookie來(lái)保存用戶登錄信息的實(shí)現(xiàn)代碼
下面小編就為大家?guī)?lái)一篇php同時(shí)使用session和cookie來(lái)保存用戶登錄信息的實(shí)現(xiàn)代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧2016-05-05laravel Validator ajax返回錯(cuò)誤信息的方法
今天小編就為大家分享一篇laravel Validator ajax返回錯(cuò)誤信息的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09ThinkPHP3.2.1圖片驗(yàn)證碼實(shí)現(xiàn)方法
這篇文章主要介紹了ThinkPHP3.2.1圖片驗(yàn)證碼實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了thinkPHP3.2.1生成圖片驗(yàn)證碼過(guò)程中遇到的問(wèn)題及相應(yīng)的解決方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08Laravel實(shí)現(xiàn)構(gòu)造函數(shù)自動(dòng)依賴注入的方法
這篇文章主要介紹了Laravel實(shí)現(xiàn)構(gòu)造函數(shù)自動(dòng)依賴注入的方法,涉及Laravel構(gòu)造函數(shù)自動(dòng)初始化的相關(guān)技巧,需要的朋友可以參考下2016-03-03