最近在寫個(gè)需要簡單支付的小項(xiàng)目,用到了支付寶接口,現(xiàn)已完成。把php接入支付寶的流程寫在這里供像我一樣的小白參考。
1.首先要有一個(gè)創(chuàng)建一個(gè)應(yīng)用(選好自己想要的功能,關(guān)于支付的功能,貌似都需要簽約)
2.下載SDKDome網(wǎng)址
https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.CBtzBFtreeId=203articleId=105910docType=1
我選擇的是MD5簽名方式,下面紅框內(nèi)就是做好的php Demo
- lib文件很重要,是整個(gè)接口的核心類文件;
- alipay.config.php是相關(guān)參數(shù)的配置文件
- alipayapi.php 是支付寶接口入口文件
- notify_url.php 是服務(wù)器異步通知頁面文件;
- return_url.php 是頁面跳轉(zhuǎn)同步通知文件;
3.打開alipay.config.php
4.配置完成后這個(gè)小例子就能直接訪問了
通過這個(gè)例子,我們就能靈活運(yùn)用了 開發(fā)文檔:
https://doc.open.alipay.com/docs/doc.htm?treeId=203articleId=105288docType=1
嵌入thinkphp3.2.3 我保留了
重新命名為
分別給這五個(gè)文件加上命名空間
![](/d/20211017/53da42f9b5d060ca6d662f98db1108da.gif)
這四個(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ù)器異步通知頁面路徑
$notify_url = $args['notify_url'];
//需http://格式的完整路徑,不能加?id=123這類自定義參數(shù)
//頁面跳轉(zhuǎn)同步通知頁面路徑
$return_url = $args['return_url'];
//需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),不能寫成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://開頭的完整路徑,例如:http://www.商戶網(wǎng)址.com/myorder.html
//防釣魚時(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ù)組,無需改動(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ù)
![](/d/20211017/db8323c5a4d4c5847d6901d786fd51f1.gif)
然后新建控制器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頁面的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)試用,寫文本函數(shù)記錄程序運(yùn)行情況是否正常
//logResult("這里寫入想要調(diào)試的代碼變量值,或其他運(yùn)行的結(jié)果記錄");
}
}
}
然后
![](/d/20211017/14dfdced2febbfc5c89eadcb870ac1f0.gif)
這樣就成功完成簡單的支付功能了
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- PHP封裝XML和JSON格式數(shù)據(jù)接口操作示例
- PHP調(diào)用全國天氣預(yù)報(bào)數(shù)據(jù)接口查詢天氣示例
- php的api數(shù)據(jù)接口書寫實(shí)例(推薦)
- PHP實(shí)現(xiàn)chrome表單請(qǐng)求數(shù)據(jù)轉(zhuǎn)換為接口使用的json數(shù)據(jù)
- PHP實(shí)現(xiàn)騰訊短網(wǎng)址生成api接口實(shí)例
- PHP語言對(duì)接抖音快手小紅書視頻/圖片去水印API接口源碼
- PHP預(yù)定義接口——Iterator用法示例
- php與阿里云短信接口接入操作案例分析
- PHP開發(fā)API接口簽名生成及驗(yàn)證操作示例
- PHP接口類(interface)的定義、特點(diǎn)和應(yīng)用示例
- 微信小程序開發(fā)之獲取用戶手機(jī)號(hào)碼(php接口解密)
- PHP 對(duì)象接口簡單實(shí)現(xiàn)方法示例
- PHP開發(fā)api接口安全驗(yàn)證操作實(shí)例詳解
- 如何用PHP編寫簡單的api數(shù)據(jù)接口