技术相关 · 2014年8月21日

基于ecshop手机微信站的微信支付开发

最近做了微信的手机登陆、手机支付,  手机微信登陆前面已经介绍过了, 现在介绍下微信支付。

这个接口是完全适应于ecshop, 以一个插件的形式(用的jsapi), 但是在其他地方的道理是一样的。

先来看下在ecshop中的目录结构      

 基于ecshop手机微信站的微信支付开发

其中 wxpay这个文件是官网提供的, 放在ecshop的根目录下面的  includes/modules下面。

插件代码在payment文件下面,  命名为   wxpay.php    (注意这个命名,不要改)。

然后看下  wxpay.php 这个的具体的代码。

<?php
/**
 * ECSHOP 微信插件  
 * ============================================================================
 *   微信支付
 *   author: ZHANGLIN
 * ============================================================================
 */

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

$payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/wxpay.php';

if (file_exists($payment_lang))
{
    global $_LANG;

    include_once($payment_lang);
}

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

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

    /* 描述对应的语言项 */
    $modules[$i]['desc']    = 'wxpay_desc';

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

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

    /* 作者 */
    $modules[$i]['author']  = 'ZHANGLIN';

    /* 网址 */
    $modules[$i]['website'] = 'https://mp.weixin.qq.com';

    /* 版本号 */
    $modules[$i]['version'] = '1.0.0';

    /* 配置信息 */
    $modules[$i]['config']  = array(
        array('name' => 'app_id',           'type' => 'text',   'value' => ''),
        array('name' => 'paysign_key',      'type' => 'text',   'value' => ''),
        array('name' => 'sign_type',        'type' => 'text',   'value' => 'sha1'), 
        array('name' => 'partner_key',      'type' => 'text',   'value' => ''),
        array('name' => 'app_sercert',      'type' => 'text',   'value' => ''),
        array('name' => 'parener_id',       'type' => 'text',   'value' => ''),
    ); 
    return;
}

/**
 * 类
 */
class wxpay
{

    /**
     * 构造函数
     *
     * @access  public
     * @param
     *
     * @return void
     */
    function wxpay()
    {
    }

    function __construct()
    {
        $this->wxpay();
    }

    /**
     * 生成支付代码
     * @param   array   $order      订单信息
     * @param   array   $payment    支付方式信息
     */
    function get_code($order, $payment)
    {
        if (!defined('EC_CHARSET'))
        {
            $charset = 'utf-8';
        }
        else
        {
            $charset = EC_CHARSET;
        }   

        //定义配置常量
        define('APPID' ,     $payment['app_id']);  //appid
        define('APPKEY' ,    $payment['paysign_key']); //paysign key
        define('SIGNTYPE',   $payment['sign_type']); //method
        define('PARTNERKEY', $payment['partner_key']);//通加密串
        define('APPSERCERT', $payment['app_sercert']); 
        define('PARTNERID',  $payment['parener_id']); 
        include_once(ROOT_PATH . "includes/modules/wxpay/WxPayHelper.php"); 
 
        $commonUtil = new CommonUtil();
        $wxPayHelper = new WxPayHelper();  
        $wxPayHelper->setParameter("bank_type", "WX");
        $wxPayHelper->setParameter("body", '马尼尔商品');
        $wxPayHelper->setParameter("partner", PARTNERID);
        $wxPayHelper->setParameter("out_trade_no", $order['order_sn']);
        $wxPayHelper->setParameter("total_fee", $order['order_amount']*100);
        $wxPayHelper->setParameter("fee_type", "1");
        $wxPayHelper->setParameter("notify_url", return_url(basename(__FILE__, '.php')));
        $wxPayHelper->setParameter("spbill_create_ip", real_ip());
        $wxPayHelper->setParameter("input_charset", "GBK");
        $package = $wxPayHelper->create_biz_package(); 

        echo '<script language="javascript">
        function callpay()
        {
            WeixinJSBridge.invoke("getBrandWCPayRequest",'.$package.',function(res){
            WeixinJSBridge.log(res.err_msg);
            alert(res.err_code+res.err_desc+res.err_msg);
            });
        }
        </script> ';
        $button = '<button type="button" class="btn_white" onclick="callpay()">微信支付</button>';

        return $button;
    } 

    /**
    *  响应操作
    */
    function respond()
    {
        if ( isset($_GET) )
        {
            //支付信息
            $sql = 'SELECT * FROM ' . $GLOBALS['ecs']->table('payment') .
            " WHERE pay_code = 'wxpay' AND enabled = 1"; 
            $payment = $GLOBALS['db']->getRow($sql);
            $payment = unserialize_config($payment['pay_config']);

            //=======================
            //  注意这里要作一个判断,  返回回来的值是否是微信支付成功后返回的值
           //========================  

            $order_sn = trim($_GET['out_trade_no']);  
            $order_id = $GLOBALS['db']->getOne("SELECT order_id FROM " . $GLOBALS['ecs']->table('order_info') . " WHERE order_sn = '$order_sn'");  
            $log_id = $GLOBALS['db']->getOne("SELECT log_id FROM " . $GLOBALS['ecs']->table('pay_log') . "  WHERE order_id = '$order_id'"); 
                    /* 改变订单状态 */
            order_paid($log_id, 2);

            return true;
        }
        else
        {
            return false;
        } 
    }
 
}

?>

 文中涉及到的附件下载:

wxpay.php.rar

wxpay