ECSHOP支付插件開發(銀生寶支付)

簡述

        上篇博文自行開發了銀生寶支付DEMO,本篇博文就是將銀生寶支付整合到ECSHOP中。ECSHOP中的支付插件開發並不是很複雜,主要提供一個插件模塊的基本信息,一個插件的類。插件模塊的進本信息主要用於和數據庫對應在後臺顯示此插件的安裝信息;類主要提供生成此第三方支付的支付代碼和回調。下面是代碼,歡迎大家相互學習。(下述代碼僅是簡單的實現了支付功能,未對代碼進行優化處理[強迫症見諒])

代碼

<?php
/**
 * ECSHOP 銀生寶支付
 * ===============================================
 * Copy: Created by WEI ZHI HUA
 * Author: ZHIHUA·WEI<[email protected]>
 * Date: 2018/5/28
 * Time: 08:59
 * Project: ECSHOP 銀生寶支付插件
 * Power: 銀生寶支付插件
 * ===============================================
 */

if (!defined('IN_ECS')) {
    die('Hacking attempt');
}

/* 模塊的基本信息 */
if (isset($set_modules) && $set_modules == TRUE) {
    $i = isset($modules) ? count($modules) : 0;

    /* 代碼 */
    $modules[$i]['code'] = basename(__FILE__, '.php');

    /* 描述對應的語言項 */
    $modules[$i]['desc'] = 'unspay_desc(銀生寶支付描述)';

    /* 是否支持貨到付款 */
    $modules[$i]['is_cod'] = '0';

    /* 是否支持在線支付 */
    $modules[$i]['is_online'] = '1';

    /* 作者 */
    $modules[$i]['author'] = 'ZHIHUA·WEI';

    /* 網址 */
    $modules[$i]['website'] = 'http://www.unspay.com';

    /* 版本號 */
    $modules[$i]['version'] = '3.0.0';

    /* 配置信息 */
    $modules[$i]['config'] = array(
        array('name' => 'merchantId', 'type' => 'text', 'value' => ''),
        array('name' => 'merchantUrl', 'type' => 'text', 'value' => ''),
        array('name' => 'merchantKey', 'type' => 'text', 'value' => ''),
    );
    return;
}

/**
 * Class unspay 銀生寶支付類
 */
class unspay
{
    /**
     * 生成支付代碼
     * @param $order array 訂單信息
     * @param $payment array 字符信息
     * @return string
     */
    function get_code($order, $payment)
    {
        $unspay_url = "http://xxxxx(銀生寶支付地址)/unspay/page/linkbank/payRequest.do";
        $version = '3.0.0';
        $merchantId = 'xxxx(銀生寶商戶號)';
        $merchantUrl = return_url(basename(__FILE__, '.php'));
        $responseMode = '2';
        $orderId = $order['order_sn'] . "A" . $order['log_id'];
        $currencyType = 'CNY';
        $amount = $order['order_amount'];
        $assuredPay = '';
        $time = date("YmdHis");
        $remark = 'payTest';
        $merchantKey = 'xxxxxxxx(銀生寶商戶密鑰)';

        $s = "merchantId=";
        $s .= $merchantId;
        $s .= "&merchantUrl=";
        $s .= $merchantUrl;
        $s .= "&responseMode=";
        $s .= $responseMode;
        $s .= "&orderId=";
        $s .= $orderId;
        $s .= "¤cyType=";
        $s .= $currencyType;
        $s .= "&amount=";
        $s .= $amount;
        $s .= "&assuredPay=";
        $s .= $assuredPay;
        $s .= "&time=";
        $s .= $time;
        $s .= "&remark=";
        $s .= $remark;
        $s .= "&merchantKey=";
        $s .= $merchantKey;
        $mac = strtoupper(md5($s));

        $def_url = '<br /><form style="text-align:center;" method=post action="' . $unspay_url . '" target="_blank">';
        $def_url .= '<input type="hidden" name="version" value="' . $version . '">';
        $def_url .= '<input type="hidden" name="merchantId" value="' . $merchantId . '">';
        $def_url .= '<input type="hidden" name="merchantUrl" value="' . $merchantUrl . '">';
        $def_url .= '<input type="hidden" name="responseMode" value="' . $responseMode . '">';
        $def_url .= '<input type="hidden" name="orderId" value="' . $orderId . '">';
        $def_url .= '<input type="hidden" name="currencyType" value="' . $currencyType . '">';
        $def_url .= '<input type="hidden" name="amount" value="' . $amount . '">';
        $def_url .= '<input type="hidden" name="assuredPay" value="' . $assuredPay . '">';
        $def_url .= '<input type="hidden" name="time" value="' . $time . '">';
        $def_url .= '<input type="hidden" name="remark" value="' . $remark . '">';
        $def_url .= '<input type="hidden" name="mac" value="' . $mac . '">';
        //$def_url .= '<input type="hidden" name="bankCode" value="'.$bankCode.'">';
        $def_url .= '<input type="hidden" name="merchantKey" value="' . $merchantKey . '">';
        $def_url .= '<input type="submit" value="立即使用銀生寶支付">';
        $def_url .= "</form>";
        return $def_url;
    }

    /**
     * 響應操作
     */
    function respond()
    {
        $merchantId = $_REQUEST["merchantId"];
        $merchantKey = "xxxxx(銀生寶商戶密鑰)";
        $responseMode = $_REQUEST["responseMode"];
        $orderId = $_REQUEST["orderId"];
        $currencyType = $_REQUEST["currencyType"];
        $amount = $_REQUEST["amount"];
        $returnCode = $_REQUEST["returnCode"];
        $returnMessage = $_REQUEST["returnMessage"];
        $mac = $_REQUEST["mac"];
        $success = $returnCode == "0000";
        $paid = $returnCode == "0001";
        $s = "merchantId=";
        $s .= $merchantId;
        $s .= "&responseMode=";
        $s .= $responseMode;
        $s .= "&orderId=";
        $s .= $orderId;
        $s .= "¤cyType=";
        $s .= $currencyType;
        $s .= "&amount=";
        $s .= $amount;
        $s .= "&returnCode=";
        $s .= $returnCode;
        $s .= "&returnMessage=";
        $s .= $returnMessage;
        $s .= "&merchantKey=";
        $s .= $merchantKey;
        $nowMac = strtoupper(md5($s));

        //進行密文驗證
        if ($nowMac == $mac) {
            //說明支付成功,在此處進行你的業務邏輯修改開發
            //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
            //商戶訂單號
            $order_sn_arr = explode('A', $orderId);
            //$order_sn = $orderId;
            order_paid($order_sn_arr[1]);

            //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        } else {
            //此處支付未成功,進行支付未成功邏輯開發
            //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
            if ($success || $paid) {
                $success = false;
                $paid = false;
                $returnCode = "0401";
                $returnMessage = "mac值校驗錯誤!";
            }
            return false;
            //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        }
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章