1. 程式人生 > >phpt5支付寶登陸支付介面解析

phpt5支付寶登陸支付介面解析

 先看效果圖 

 下面的原始碼來源網路,自己對照修改。

放入一個外掛庫中,方便管理

建立支付類

1.發起支付

public function init() {
    $order_id   = $_REQUEST['order_id'];
    $order_info = $this->order_db->get_one(array('id'=>$order_id));
    $product_info = $this->product_db->get_one(array('id'=>$order_info['product_id']));

    // 發起支付寶支付
    require_once("./phpcms/plugin/alipay/alipay.config.php");
    require_once("./phpcms/plugin/alipay/lib/alipay_submit.class.php");
    /**************************請求引數**************************/
    //商戶訂單號,商戶網站訂單系統中唯一訂單號,必填
    $out_trade_no = $order_info['orderno']; // 訂單orderno

    //訂單名稱,必填
    $subject = '預訂'.$product_info['name'].'訂單';        // 訂單名稱

    //付款金額,必填
    $total_fee = $order_info['payprice'];   // 訂單金額

    //商品描述,可空
    $body = $product_info['name']; // 可空
    /************************************************************/

    //構造要請求的引數陣列,無需改動
    $parameter = array(
        "service"       => $alipay_config['service'],
        "partner"       => $alipay_config['partner'],
        "seller_id"     => $alipay_config['seller_id'],
        "payment_type"  => $alipay_config['payment_type'],
        "notify_url"    => $alipay_config['notify_url'],
        "return_url"    => $alipay_config['return_url'],
        "anti_phishing_key"=>$alipay_config['anti_phishing_key'],
        "exter_invoke_ip"=>$alipay_config['exter_invoke_ip'],
        "out_trade_no"  => $out_trade_no,
        "subject"   => $subject,
        "total_fee" => $total_fee,
        "body"  => $body,
        "_input_charset"    => trim(strtolower($alipay_config['input_charset']))
        //其他業務引數根據線上開發文件,新增引數.文件地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.kiX33I&treeId=62&articleId=103740&docType=1
        //如"引數名"=>"引數值" 
    );

    //建立請求
    $alipaySubmit = new AlipaySubmit($alipay_config);
    $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "確認");
    echo $html_text;
}

2.處理支付後的動作,比如更改訂單狀態為支付,跳轉到支付成功頁面等等

a.處理同步通知

// 同步通知處理
public function return_url() {
    $this->ilog_db->addLog('return_url');
    require_once("./phpcms/plugin/alipay/alipay.config.php");
    require_once("./phpcms/plugin/alipay/lib/alipay_notify.class.php");
    //計算得出通知驗證結果
    $alipayNotify = new AlipayNotify($alipay_config);
    $verify_result = $alipayNotify->verifyReturn();
    if($verify_result) {//驗證成功
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //請在這裡加上商戶的業務邏輯程式程式碼
        
        //——請根據您的業務邏輯來編寫程式(以下程式碼僅作參考)——
        //獲取支付寶的通知返回引數,可參考技術文件中頁面跳轉同步通知引數列表
        //商戶訂單號
        $out_trade_no = $_GET['out_trade_no'];

        //支付寶交易號

        $trade_no = $_GET['trade_no'];

        //交易狀態
        $trade_status = $_GET['trade_status'];


        if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
            //判斷該筆訂單是否在商戶網站中已經做過處理
                //如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程式
                //如果有做過處理,不執行商戶的業務程式
        }
        else {
          echo "trade_status=".$_GET['trade_status'];
        }
        
        //——請根據您的業務邏輯來編寫程式(以上程式碼僅作參考)——
        $this->_afterPay($out_trade_no);
    }
    else {
        //驗證失敗
        //如要除錯,請看alipay_notify.php頁面的verifyReturn函式
        echo "驗證失敗";
    }
    
}

b.處理非同步通知

// 非同步通知處理
public function notify_url() {
    $this->ilog_db->addLog('notify_url');
    require_once("./phpcms/plugin/alipay/alipay.config.php");
    require_once("./phpcms/plugin/alipay/lib/alipay_notify.class.php");
    //計算得出通知驗證結果
    $alipayNotify = new AlipayNotify($alipay_config);
    $verify_result = $alipayNotify->verifyNotify();
    if($verify_result) {//驗證成功
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //請在這裡加上商戶的業務邏輯程式代

        
        //——請根據您的業務邏輯來編寫程式(以下程式碼僅作參考)——
        
        //獲取支付寶的通知返回引數,可參考技術文件中伺服器非同步通知引數列表
        
        //商戶訂單號
        $out_trade_no = $_POST['out_trade_no'];

        //支付寶交易號

        $trade_no = $_POST['trade_no'];

        //交易狀態
        $trade_status = $_POST['trade_status'];


        if($_POST['trade_status'] == 'TRADE_FINISHED') {
            //判斷該筆訂單是否在商戶網站中已經做過處理
                //如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程式
                //請務必判斷請求時的total_fee、seller_id與通知時獲取的total_fee、seller_id為一致的
                //如果有做過處理,不執行商戶的業務程式
                    
            //注意:
            //退款日期超過可退款期限後(如三個月可退款),支付寶系統傳送該交易狀態通知

            //除錯用,寫文字函式記錄程式執行情況是否正常
            //logResult("這裡寫入想要除錯的程式碼變數值,或其他執行的結果記錄");
        }
        else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
            //判斷該筆訂單是否在商戶網站中已經做過處理
                //如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程式
                //請務必判斷請求時的total_fee、seller_id與通知時獲取的total_fee、seller_id為一致的
                //如果有做過處理,不執行商戶的業務程式
                    
            //注意:
            //付款完成後,支付寶系統傳送該交易狀態通知

            //除錯用,寫文字函式記錄程式執行情況是否正常
            //logResult("這裡寫入想要除錯的程式碼變數值,或其他執行的結果記錄");
        }

        //——請根據您的業務邏輯來編寫程式(以上程式碼僅作參考)——
        $this->_afterPay($out_trade_no);
    }
    else {
        //驗證失敗
        echo "fail";
        //除錯用,寫文字函式記錄程式執行情況是否正常
        //logResult("這裡寫入想要除錯的程式碼變數值,或其他執行的結果記錄");
    }
}

c.處理成功後的訂單資料處理與成功提示

private function _afterPay($orderno) {
    // 獲取訂單資訊
    $order_info  = $this->order_db->get_one(array('orderno'=>$orderno));

    if ($order_info['pay_status'] != '1') {
        $data['pay_status'] = '1';
        $data['pay_type']   = 'alipay';
        $data['pay_code']   = '';
        $data['paytime']    = time();
        $data['order_status']= 3; // 已支付
        $r = $this->order_db->update($data,array('orderno'=>$orderno));
        if ($r !== FALSE) 
        {
            // 處理支付資訊
            header("Location:?m=home&c=order&a=payDone&orderno=".$orderno); 
        } else {
            showmessage('系統異常','blank');
        }
    } else {
        // 處理支付資訊
        header("Location:?m=home&c=order&a=payDone&orderno=".$orderno); 
    }
    
}

支付配置

<?php
/* *
 * 配置檔案
 * 版本:3.4
 * 修改日期:2016-03-08
 * 說明:
 * 以下程式碼只是為了方便商戶測試而提供的樣例程式碼,商戶可以根據自己網站的需要,按照技術文件編寫,並非一定要使用該程式碼。
 * 該程式碼僅供學習和研究支付寶介面使用,只是提供一個參考。

 * 安全校驗碼檢視時,輸入支付密碼後,頁面呈灰色的現象,怎麼辦?
 * 解決方法:
 * 1、檢查瀏覽器配置,不讓瀏覽器做彈框遮蔽設定
 * 2、更換瀏覽器或電腦,重新登入查詢。
 */
 
//↓↓↓↓↓↓↓↓↓↓請在這裡配置您的基本資訊↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
//合作身份者ID,簽約賬號,以2088開頭由16位純數字組成的字串,檢視地址:https://b.alipay.com/order/pidAndKey.htm
// $alipay_config['partner']        = '2088811285662645';
$alipay_config['partner']       = '2088221883850827'; // jim

//收款支付寶賬號,以2088開頭由16位純數字組成的字串,一般情況下收款賬號就是簽約賬號
$alipay_config['seller_id'] = $alipay_config['partner'];

// MD5金鑰,安全檢驗碼,由數字和字母組成的32位字串,檢視地址:https://b.alipay.com/order/pidAndKey.htm
// $alipay_config['key']            = 'behulcppuzrok5k7a9jikl9u2bmvsisr';
$alipay_config['key']           = '4t3m3qnwiq4lzqvv66sfu2vy9r3skkcn'; // jim

// 伺服器非同步通知頁面路徑  需http://格式的完整路徑,不能加?id=123這類自定義引數,必須外網可以正常訪問
$alipay_config['notify_url'] = "http://local.duanzu.com/?m=ipay&c=alipay&a=notify_url";

// 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義引數,必須外網可以正常訪問
$alipay_config['return_url'] = "http://local.duanzu.com/?m=ipay&c=alipay&a=return_url";

//簽名方式
$alipay_config['sign_type']    = strtoupper('MD5');

//字元編碼格式 目前支援 gbk 或 utf-8
$alipay_config['input_charset']= strtolower('utf-8');

//ca證書路徑地址,用於curl中ssl校驗
//請保證cacert.pem檔案在當前資料夾目錄中
$alipay_config['cacert']    = getcwd().'\\cacert.pem';

//訪問模式,根據自己的伺服器是否支援ssl訪問,若支援請選擇https;若不支援請選擇http
$alipay_config['transport']    = 'http';

// 支付型別 ,無需修改
$alipay_config['payment_type'] = "1";
        
// 產品型別,無需修改
$alipay_config['service'] = "create_direct_pay_by_user";

//↑↑↑↑↑↑↑↑↑↑請在這裡配置您的基本資訊↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑


//↓↓↓↓↓↓↓↓↓↓ 請在這裡配置防釣魚資訊,如果沒開通防釣魚功能,為空即可 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    
// 防釣魚時間戳  若要使用請呼叫類檔案submit中的query_timestamp函式
$alipay_config['anti_phishing_key'] = "";
    
// 客戶端的IP地址 非區域網的外網IP地址,如:221.0.0.1
$alipay_config['exter_invoke_ip'] = "";
        
//![](http://images2015.cnblogs.com/blog/422101/201609/422101-20160906162103863-1845970975.png)

↑↑↑↑↑↑↑↑↑↑請在這裡配置防釣魚資訊,如果沒開通防釣魚功能,為空即可 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

相關推薦

phpt5支付登陸支付介面解析

 先看效果圖   下面的原始碼來源網路,自己對照修改。 放入一個外掛庫中,方便管理 建立支付類 1.發起支付 public function init() { $order_id = $_REQUEST['order_id']; $order_info = $this->

支付客戶端架構解析:iOS 容器化框架初探

1. 前言 由本章節開始,我們將從支付寶客戶端的架構設計方案入手,細分拆解客戶端在“容器化框架設計”、“網路優化”、“效能啟動優化”、“自動化日誌收集”、“RPC 元件設計”、“移動應用監控、診斷、定位”等具體實現,帶領大家進一步瞭解支付寶在客戶端架構上的迭代與優化歷程。 本節將介紹支付寶 iOS 容器化

支付客戶端架構解析:Android 客戶端啟動速度優化之「垃圾回收」

前言 《支付寶客戶端架構解析》系列將從支付寶客戶端的架構設計方案入手,細分拆解客戶端在“容器化框架設計”、“網路優化”、“效能啟動優化”、“自動化日誌收集”、“RPC 元件設計”、“移動應用監控、診斷、定位”等具體實現,帶領大家進一步瞭解支付寶在客戶端架構上的迭代與優化歷程。 本節將介紹支付寶 Andro

支付 App 構建優化解析:通過安裝包重排布優化 Android 端啟動效能

1. 前言 本章節我們將圍繞《支付寶 App 構建優化解析》另啟新系列,細分拆解客戶端在“程式碼管理”、“證書管理”、“版本管理”、“構建打包”等維度的具體實現方案展開討論,帶領大家進一步瞭解支付寶在 App 構建模組下的持續優化。 本節將主要記錄通過對支付寶 Android Apk 檔案的重新佈局,來改

支付 App 構建優化解析:Android 包大小極致壓縮

前言 本章節我們將圍繞《支付寶 App 構建優化解析》另啟新系列,細分拆解客戶端在“程式碼管理”、“證書管理”、“版本管理”、“構建打包”等維度的具體實現方案展開討論,帶領大家進一步瞭解支付寶在 App 構建模組下的持續優化。 本節將主要記錄通過對支付寶 Android 包大小進行壓縮,來改善執行效率和質

支付客戶端架構解析:iOS 客戶端啟動效能優化初探

前言 《支付寶客戶端架構解析》系列將從支付寶客戶端的架構設計方案入手,細分拆解客戶端在“容器化框架設計”、“網路優化”、“效能啟動優化”、“自動化日誌收集”、“RPC 元件設計”、“移動應用監控、診斷、定位”等具體實現,帶領大家進一步瞭解支付寶在客戶端架構上的迭代與優化歷程。 啟動應用是使用者使用任何一款

呼叫支付第三方支付介面詳解(沙箱環境)

首發地址:Java知音 注:這裡的支付是沙箱模擬支付 註冊螞蟻金服開放平臺 螞蟻金服開放平臺註冊地址 支付寶掃碼登陸 -> 註冊為自主研發者 2. 配置你的沙箱支付寶 支付寶提供一鍵生成工具便於開發者生成一對RSA2金鑰:https:

Python3.6+Django1.11.3安裝支付SDK呼叫支付線上支付介面

準備工作 首先需要註冊成為螞蟻金服的開發者     https://openhome.alipay.com/platform/manageHome.htm 接著就是下載支付寶的祕鑰生成工具。 RSA簽名驗籤工具windows_V1.4 教程支付

Java SpringMVC 支付-即時支付介面-ping++支付

一. 前言介紹:     前幾天突然要做支付寶的支付功能,​因為以前一直沒有做過支付功能,所以比較茫然,但是後來經過不斷摸索和前輩指導,終於做了出來;後來發現,其實做支付寶的支付功能也並不難。 二.正文:   首先你要搞到商家的支付寶賬號,合作者ID  

PHP支付APP支付介面

1-1:首先下載支付寶官方SDK,我的是PHP版的,起名“alipay” 1-2:配置檔案 config.php // 支付寶 'ALIPAY_CONFIG' =>[ 'app_id' =>'12345678', /

支付批量轉賬介面使用全過程 一一介紹

    關於支付寶批量轉賬介面,我覺得有寫點什麼的必要了,畢竟在裡面走了很多彎路%>_<%,而且網上關於這個的資料少之又少,甚至有人都不知道有這個,寶寶真是快哭了(;′⌒`),下面我來一一

Java web整合支付電腦支付介面(沙箱環境)

前言 這是博主的第一篇部落格,剛剛畢業,打算把工作中遇到的一些比較普遍的問題記錄下來,如果有寫的不好的地方或者寫錯的地方歡迎指出,一定會改!嘿嘿嘿。先來立個flag,我希望三年之後能夠成為一名不怕bug,熱愛生活,健康快樂的富婆! 這篇部落格主要介紹如何在Jav

第一章 仿支付芝麻信用介面製作(需要自定義View的相關知識)

//構造器//ondraw 方法是專門負責View的繪製方法,用畫筆畫出的圖形 都是在這個方法裡繪畫出來的;@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas)

支付APP支付介面-PHP

       最近做了一個基於微信,alipay的支付功能,主要包括alipay的wap(喚醒支付寶APP),pc,APP支付,前兩者基於MD5簽名,後者基於RSA簽名; 微信的內部瀏覽器支付,APP支付,至於wap,需要申請,達到一定的條件才能審批通過,目前只有京東,1號

支付新版支付介面Java後臺簽名

一、APP支付 支付寶更新了支付介面,同時也給出了服務端SDK供下載使用。該SDK提供了一系列的工具類和部分請求的實現。提供了一個AlipaySignature類來提供統一的簽名工具類來幫助使用者快速實現簽名。在SDK下載的文件最後一個部分,提示使用者在簽名的時候使用 St

Java後臺使用支付進行支付實現---使用阿里提供的對應服務的支付介面

       開發專案中使用到了財務支付:選擇支付寶進行支付。在java後臺實現支付寶支付,當初自己接受到這個專案時,也很迷茫,沒有什麼方向。經過自己研究之後,將自己的經驗同大家分享,希望對大家有所幫助。      1.專案中肯定有商家使用者,我們使用相應的阿里提供的介面時

Asp.Net整合支付當面付介面報ISV許可權不足

在使用C#開發支付寶當面付介面時,下載了[官網的Demo] 使用公司的支付寶商家賬號替換好引數後,報了以下的錯誤: 配置或網路異常,請檢查後重試 在除錯的過程當中,發現了真實的錯誤問題:ISV許可權不足 { "alipay_tra

支付線上支付介面開發教程與總結

1.什麼是第三方支付   所謂第三方支付,就是一些和各大銀行簽約、並具備一定實力和信譽保障的第三方獨立機構提供的交易支援平臺。在通過第三方支付平臺的交易中,買方選購商品後,使用第三方平臺提供的賬戶進行貨款支付,由第三方通知賣家貨款到達。   目前提供第三方支付的機構很

支付客戶端架構解析:Android 容器化框架初探

摘要: 本文將介紹支付寶 Android 容器化框架設計的基本思路。 1. 前言 由本章節開始,我們將從支付寶客戶端的架構設計方案入手,細分拆解客戶端在“容器化框架設計”、“網路優化”、“效能啟動優化”、“自動化日誌收集”、“RPC 元件設計”、“移動應用監控、診

除錯支付離線認證介面遇到的問題總結

通過 android的JNI呼叫支付寶離線認證庫本地介面時,我欲返回一個類的例項,但是卻報了幾個錯,最後查出來了原因。在此總結下。  錯誤一 :E/dalvikvm﹕JNI ERROR (app bug): accessed stale local reference ,j