繼上一篇《支付那些小事兒--微信支付》常遂,我這次說一說支付寶支付纳令,希望可以幫助小伙伴少走彎路,少入坑克胳。話不多說平绩,還是直接上代碼吧。
注:
1.支付文件是從支付寶上直接拿過來的
2.依舊是TP框架
【1】將文件放入第三方類庫:
(1)
* 類名:AlipayConfig.php
* 功能:支付寶配置文件
* 修改配置:
// MD5密鑰漠另,安全檢驗碼捏雌,由數字和字母組成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
$alipay_config['key'] = '';//(**從支付寶中獲取**)
// 服務器異步通知頁面路徑 需http://格式的完整路徑笆搓,不能加?id=123這類自定義參數性湿,必須外網可以正常訪問
$alipay_config['notify_url'] = 'http://' . $_SERVER['SERVER_NAME'] . '/index.php/Wine/PayCallback/alipay_notify';
// 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數满败,必須外網可以正常訪問
$alipay_config['return_url'] = 'http://' . $_SERVER['SERVER_NAME'] . '/index.php?g=Wine&m=Orders&a=alipay_return';
(2)
* 類名:AlipayNotify.php
* 功能:支付寶通知處理類
* 詳細:處理支付寶各接口通知返回
(3)
* 類名:Alipay.php
* 功能:手機網站支付接口接入頁
* 詳細:處理支付寶各接口通知返回
class Alipay {
public function submit($params) {
//建立請求
$alipaySubmit = new AlipaySubmit($alipay_config);
$html_text = $alipaySubmit->buildRequestForm($parameter, "get", "確認");
return '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>支付寶支付</title>
</head>' . $html_text . '
</body>
</html>';
}
}
(4)
* 類名:notify_url.php
* 功能:支付寶服務器異步通知頁面
* 詳細:處理支付寶各接口通知返回
【2】支付業(yè)務邏輯
(1)GoodsController.class.php 下提交訂單 ajax_sure()
public function ajax_sure() {
.
.
.
$data['order_code'] = $order_code;
$addr[0] = $_POST['prov'];
$addr[1] = $_POST['city'];
$addr[2] = $_POST['dist'];
$addr[3] = $_POST['area'];
$data['area'] = serialize($addr);
$data['create_time'] = time();
$data['update_time'] = time();
$data['ip'] = $_SERVER['REMOTE_ADDR'];
if ($data['pay_id'] == 1) {
$data['order_status'] = 11; //已付款
$data['status'] = '1';
} else {
$data['order_status'] = 10; //待付款
$data['status'] = '1';
}
//函數調用 返回信息
$this->Callback_url($data);
}
/**
* 回調信息函數
* @param type $data
*/
public function Callback_url($data) {
$o_model = D("Wine/Orders");
$add_id = $o_model->add($data);
if (!$add_id) {
$this->error("訂單提交失敗窘奏,請稍后重試!");
}
.
.
.
if ('3' == $data['pay_id']) {
//支付寶支付
$msg = '正在為您跳轉到支付寶支付頁面葫录,請等待……';
$url = U("Pay/doalipay", array('o_id' => $add_id));
}
$this->success("訂單提交成功着裹!" . $msg, $url);
}
(2)PayController.class.php 下
/**
* 支付頁面
*/
public function doalipay() {
$o_id = I("get.o_id", 0, "intval");
$info = $this->model->findone(array("a.id" => $o_id, 'a.status' => array('neq', '-1')));
//10代表訂單待支付的狀態(tài)
if ($info['order_status'] != 10) {
$this->error("訂單已支付!");
}
vendor("Payment.Alipay.Alipay");
$alipay = new \Alipay();
$param['order_sn'] = $info['order_code'];
// $param['order_amount'] = $info['pay_price'];
$param['order_amount'] = 0.01;//測試支付時,將支付價格設為0.01元骇扇,土豪朋友忽略此提示O(∩_∩)O~
$param['order_subject'] = '支付寶支付測試';
$param['return_url'] = 'http://' . $_SERVER['SERVER_NAME'] . '/index.php/Wine/Orders/pay_ok/o_id/'.$o_id;
$return = $alipay->submit($param);
echo $return;
exit;
}
就是這么簡單幾步摔竿,到此,支付寶支付的流程就已經結束了少孝。