Ecshop对接discuz步骤

Ecshop对接discuz步骤

 

1.安装discuz

2.将uploaduc_client文件夹复制到ecshop根目录下

 

3.在ecshop后台》用户管理》会员整合  选择ucenter安装

图的地方点击"直接保存配置信息".

 

4.回到会员整合页面 对UCenter进行设置

 

 

5.登录discuz后台》站长》UCenter设置

 

然后提交

 

6.到discuz后台》ucenter》应用管理 查看是否通信成功

    

7.导出导入ecshop用户
使用navicat导出ecshop的用户表ec_users,导出以下字段的数据.导出成excel的xls文件users.XLS

user_name

password

reg_time

last_login

last_time

last_ip

ec_salt

salt

Moblie_phone

email


用excel手工新增一个字段groupid,设置值为10.discuz中是"新手上路"用户组.
再用excel手工新增一个字段timeoffset,设置为9999或8.discuz中,9999的时区是使用系统默认.8是东八区时间,即北京时间.
如果excel打开该文件时提示某些可能错误,则操作完成后需要另存一下同名文件.因为navicat导出xls文件有些问题,需要用excel另存一下正确的xls文件.
用navica将user.XLS文件导入ucenter的用户表uc_center_members.字段对应关系如下:

ucenter字段名

ecshop字段名

uid

user_id

username

user_name

password

password

email

email

regdate

reg_time

lastloginip

last_ip

lastlogintime

last_login

salt

ec_salt

tel

Mobile_phone



只要ucenter的加盐字段salt和ecshop的ec_salt字段对应,password对应.则用户就可以使用以前的密码登录了.我没有见ecshop使用过salt字段进行加密,可能是预留的字段吧.

    

8.ecshop找到user.php文件,找到$action == 'act_login'。将登录成功的跳转改为下面的内容:

$ucdata = isset($user->ucdata)? $user->ucdata : '';

show_message($_LANG['login_success'].$ucdata,array($_LANG['back_up_page'], $_LANG['profile_lnk']), array($back_act,'user.php'), 'succ');

 

//到这一步就应该可以同步登陆了

 

9.找到user.php中的$action == 'logout',将退出后的跳转改为下面的内容:

    $ucdata = empty($user->ucdata)? "" : $user->ucdata;

show_message($_LANG['logout'].$ucdata,array($_LANG['back_up_page'],$_LANG['back_home_lnk']), array($back_act, 'index.php'), 'info');

 

10.打开EC根目录下的 api 目录下的 uc.php ,在uc.php中 找到 set_cookie 函数。 

它是 判断 user_id 这个参数,如果是空的 就销毁 cookie,否则 设置cookie 但是发现 设置 cookie 的时候 是:

setcookie("ECS[username]", $user_name, $time, $GLOBALS['cookie_path'],  是有四个参数,设置了 cookie 的路径,可是销毁 cookie 的时候 是 没有 加 路径的 ,所以退出的时候 是没有 销毁 cookie 的,

需要加上 $GLOBALS['cookie_path'],作为 第四个参数。

11.在 discuz中新注册用户,注册完成后 自动就是在登录状态,在EC 中 怎么刷新 也不能登录,在discuz中找到class_member.php文件,在注册过程最后showmaessage之前加入$ucsynlogin=uc_user_synlogin($uid);

$extra = array(

'showid' => 'succeedmessage',

'extrajs' => '<script type="text/javascript">'.

'setTimeout("window.location.href =\''.$href.'\';", '.$refreshtime.');'.

'$(\'succeedmessage_href\').href = \''.$href.'\';'.

'$(\'main_message\').style.display = \'none\';'.

'$(\'main_succeed\').style.display = \'\';'.

'$(\'succeedlocation\').innerHTML = \''.lang('message', $locationmessage).'\';'.

'</script>'.$ucsynlogin,

'striptags' => false,

);

并把之前重复的删掉

 

12.同样 在EC中注册用户,注册完成后自动就是在登录 状态,在discuz中 怎么刷新 也不能登录, 需要 也在 discuz中登录一次后才可以

首先 在 EC 的站点下 user.php 找到 if(register($username, $password, $email, $other) !==false) 这个判断(大约在140 行左右)。将 register($username, $password, $email, $other) 拿出去 即:

 $uid = register($username, $password, $email, $other);

  if ($uid !== false)

再找到 EC 更目录 下的 includes 下的 lib_passport.php 中的 register() 方法,找到 if (!$GLOBALS['user']->add_user($username, $password, $email)) 这个判断,同样 把 $GLOBALS['user']->add_user($username, $password, $email) 拿出去,写成:

$uid = $GLOBALS['user']->add_user($username, $password, $email);
 if (!$uid) 接着 在 这个方法的 结尾处找到 else 块中的 return true; 就是调用 recalculate_price(); 这个方法 之后的 return true;  改成 return $uid;

在 EC根目录下 的 includes 下的 modules 下的 integrates 下的 ucenter.php  中的 add_user() 这个方法,在这个方法的结尾 也是 else 块中

$this->db->query() 在调用这个方法之后,加以下代码:

$this->ucdata =  uc_call("uc_user_synlogin",array($uid));

同样 将 return true; 改成 return $uid;  接着在回到 user.php 的注册会员那块 在 if ($uid !== false) 这个判断的最后 调用 show_message() 方法之前 加入 $ucdata = empty($user->ucdata)? "" : $user->ucdata; 如果有的话就不用加了。将 show_message() 的第一参数改成 sprintf($_LANG['register_success'], $username . $ucdata) 即: show_message(sprintf($_LANG['register_success'], $username . $ucdata), array($_LANG['back_up_page'], $_LANG['profile_lnk']), array($back_act, 'user.php'), 'info');

//注意在商城中因为分手机注册和邮箱注册,邮箱注册可以不变,但手机注册要做相应的改动,而原版ecshop是用的邮箱注册的,不加入手机注册的对应方法在注册过程中会报错。

 

13.如果还无法登陆

查看uc_client文件夹下的apps.php文件

内容应该为:

<?php

$_CACHE['apps'] = array (

  1 => 

  array (

    'appid' => '1',

    'type' => 'DISCUZX',

    'name' => 'Discuz! Board',

    'url' => 'http://bbs.oin.com.cn',

    'ip' => '',

    'viewprourl' => '',

    'apifilename' => 'uc.php',

    'charset' => '',

    'dbcharset' => '',

    'synlogin' => '1',

    'recvnote' => '1',

    'extra' => false,

    'tagtemplates' => '',

    'allowips' => '',

  ),

  2 => 

  array (

    'appid' => '2',

    'type' => 'ECSHOP',

    'name' => 'oin.com.cn',

    'url' => 'http://oin.com.cn',

    'ip' => '',

    'viewprourl' => '',

    'apifilename' => 'uc.php',

    'charset' => 'utf-8',

    'dbcharset' => '',

    'synlogin' => '1',

    'recvnote' => '1',

    'extra' => '',

    'tagtemplates' => '',

    'allowips' => '',

  ),

);

 

?>

 

并且ecshopdiscuz中是相同的。到这里应该就能实现登陆、退出、注册同步了。

 

14.积分的兑换:

首先在discuz后台》全局》积分设置里面设置,如图,然后提交

 

再在UCenter》积分兑换 中设置兑换规则

 

完成后再在更新缓存选项中更新缓存,之后进入discuz个人中心查看

 

在查看ecshop中的user.php文件中看下是否有$action == 'transform_points'$action == 'act_transform_points',存在说明ecshop中也设置成功,只不过因为不是原版的ecshop所以在ecshop的个人中心中无法显示积分兑换的选项,新建对应的模板文件,文件内主要代码为:

<h3><span>论坛金钱兑换</span></h3>

             <div class="blank"></div>

       <!--{if $exchange_type eq 'ucenter'}-->

        <form action="user.php" method="post" name="transForm" οnsubmit="return calcredit();">

       <table width="100%" border="0" cellpadding="5" cellspacing="1" bgcolor="#dddddd">

                <tr>

                    <th width="120" bgcolor="#FFFFFF" align="right" valign="top">您的当前美美币:</th>

                    <td bgcolor="#FFFFFF">

                    <label for="pay_points">  </label><input type="text" size="15" id="pay_points" name="pay_points" value="{$shop_points.pay_points}" style="border:0;border-bottom:1px solid #DADADA;" readonly="readonly" /><br />

                    <div class="blank"></div>

                    <!-- <label for="rank_points">{$lang.exchange_points.0}:</label><input type="text" size="15" id="rank_points" name="rank_points" value="{$shop_points.rank_points}" style="border:0;border-bottom:1px solid #DADADA;" readonly="readonly" /> -->

                    </td>

                    </tr>

          <tr><td bgcolor="#FFFFFF"> </td>

          <td bgcolor="#FFFFFF"> </td>

          </tr>

          <tr>

            <th align="right" bgcolor="#FFFFFF"><label for="amount">{$lang.exchange_amount}:</label></th>

            <td bgcolor="#FFFFFF"><input size="15" name="amount" id="amount" value="0" οnkeyup="calcredit();" type="text" />

                <select name="fromcredits" id="fromcredits" οnchange="calcredit();">

                  {html_options options=$lang.exchange_points selected=$selected_org}

                </select>

            </td>

          </tr>

          <tr>

            <th align="right" bgcolor="#FFFFFF"><label for="desamount">{$lang.exchange_desamount}:</label></th>

            <td bgcolor="#FFFFFF"><input type="text" name="desamount" id="desamount" disabled="disabled" value="0" size="15" />

              <select name="tocredits" id="tocredits" οnchange="calcredit();">

                {html_options options=$to_credits_options selected=$selected_dst}

              </select>

            </td>

          </tr>

          <tr>

            <th align="right" bgcolor="#FFFFFF">{$lang.exchange_ratio}:</th>

            <td bgcolor="#FFFFFF">1 <span id="orgcreditunit">{$orgcreditunit}</span> <span id="orgcredittitle">{$orgcredittitle}</span> {$lang.exchange_action} <span id="descreditamount">{$descreditamount}</span> <span id="descreditunit">{$descreditunit}</span> <span id="descredittitle">{$descredittitle}</span></td>

          </tr>

          <tr><td bgcolor="#FFFFFF"> </td>

          <td bgcolor="#FFFFFF"><input type="hidden" name="act" value="act_transform_ucenter_points" /><input type="submit" name="transfrom" value="{$lang.transform}" /></td></tr>

  </table>

        </form>

       <script type="text/javascript">

        {foreach from=$lang.exchange_js item=lang_js key=key}

        var {$key} = '{$lang_js}';

        {/foreach}

 

        var out_exchange_allow = new Array();

        {foreach from=$out_exchange_allow item=ratio key=key}

        out_exchange_allow['{$key}'] = '{$ratio}';

        {/foreach}

 

        function calcredit()

        {

            var frm = document.forms['transForm'];

            var src_credit = frm.fromcredits.value;

            var dest_credit = frm.tocredits.value;

            var in_credit = frm.amount.value;

            var org_title = frm.fromcredits[frm.fromcredits.selectedIndex].innerHTML;

            var dst_title = frm.tocredits[frm.tocredits.selectedIndex].innerHTML;

            var radio = 0;

            var shop_points = ['rank_points', 'pay_points'];

            if (parseFloat(in_credit) > parseFloat(document.getElementById(shop_points[src_credit]).value))

            {

                alert(balance.replace('{%s}', org_title));

                frm.amount.value = frm.desamount.value = 0;

                return false;

            }

            if (typeof(out_exchange_allow[dest_credit+'|'+src_credit]) == 'string')

            {

                radio = (1 / parseFloat(out_exchange_allow[dest_credit+'|'+src_credit])).toFixed(2);

            }

            document.getElementById('orgcredittitle').innerHTML = org_title;

            document.getElementById('descreditamount').innerHTML = radio;

            document.getElementById('descredittitle').innerHTML = dst_title;

            if (in_credit > 0)

            {

                if (typeof(out_exchange_allow[dest_credit+'|'+src_credit]) == 'string')

                {

                    frm.desamount.value = Math.floor(parseFloat(in_credit) / parseFloat(out_exchange_allow[dest_credit+'|'+src_credit]));

                    frm.transfrom.disabled = false;

                    return true;

                }

                else

                {

                    frm.desamount.value = deny;

                    frm.transfrom.disabled = true;

                    return false;

                }

            }

            else

            {

                return false;

            }

        }

       </script>

       <!--{else}-->

        <b>{$lang.cur_points}:</b>

        <table width="100%" border="0" cellpadding="5" cellspacing="1" bgcolor="#dddddd">

          <tr>

            <td width="30%" valign="top" bgcolor="#FFFFFF"><table border="0">

              <!--{foreach from=$bbs_points item=points}-->

              <tr>

                <th>{$points.title}:</th>

                <td width="120" style="border-bottom:1px solid #DADADA;">{$points.value}</td>

              </tr>

              <!--{/foreach} -->

            </table></td>

            <td width="50%" valign="top" bgcolor="#FFFFFF"><table>

                    <tr>

                <th>{$lang.pay_points}:</th>

                <td width="120" style="border-bottom:1px solid #DADADA;">{$shop_points.pay_points}</td>

                    </tr>

              <tr>

                <th>{$lang.rank_points}:</th>

                <td width="120" style="border-bottom:1px solid #DADADA;">{$shop_points.rank_points}</td>

              </tr>

            </table></td>

          </tr>

        </table>

        <br />

        <b>{$lang.rule_list}:</b>

        <ul class="point clearfix">

          <!-- {foreach from=$rule_list item=rule} -->

          <li><font class="f1">·</font>"{$rule.from}" {$lang.transform} "{$rule.to}" {$lang.rate_is} {$rule.rate}

          <!-- {/foreach} -->

        </ul>

 

        <form action="user.php" method="post" name="theForm">

        <table width="100%" border="1" align="center" cellpadding="5" cellspacing="0" style="border-collapse:collapse;border:1px solid #DADADA;">

          <tr style="background:#F1F1F1;">

            <th>{$lang.rule}</th>

            <th>{$lang.transform_num}</th>

            <th>{$lang.transform_result}</th>

          </tr>

          <tr>

            <td>

              <select name="rule_index" οnchange="changeRule()">

                <!--{foreach from=$rule_list item=rule key=key}-->

                <option value="{$key}">{$rule.from}->{$rule.to}</option>

                <!--{/foreach}-->

              </select>

          </td>

          <td>

            <input type="text" name="num" value="0" οnkeyup="calPoints()"/>

          </td>

          <td><span id="ECS_RESULT">0</span></td>

          </tr>

          <tr>

            <td colspan="3" align="center"><input type="hidden" name="act" value="act_transform_points"  /><input type="submit" value="{$lang.transform}" /></td>

          </tr>

        </table>

        </form>

       <script type="text/javascript">

          //<![CDATA[

            var rule_list = new Object();

            var invalid_input = '{$lang.invalid_input}';

            {foreach from=$rule_list item=rule key=key}

            rule_list['{$key}'] = '{$rule.rate}';

            {/foreach}

            function calPoints()

            {

              var frm = document.forms['theForm'];

              var rule_index = frm.elements['rule_index'].value;

              var num = parseInt(frm.elements['num'].value);

              var rate = rule_list[rule_index];

 

              if (isNaN(num) || num < 0 || num != frm.elements['num'].value)

              {

                document.getElementById('ECS_RESULT').innerHTML = invalid_input;

                rerutn;

              }

              var arr = rate.split(':');

              var from = parseInt(arr[0]);

              var to = parseInt(arr[1]);

 

              if (from <=0 || to <=0)

              {

                from = 1;

                to = 0;

              }

              document.getElementById('ECS_RESULT').innerHTML = parseInt(num * to / from);

            }

 

            function changeRule()

            {

              document.forms['theForm'].elements['num'].value = 0;

              document.getElementById('ECS_RESULT').innerHTML = 0;

            }

          //]]>

       </script>

       <!--{/if}-->

        <!--{/if} -->

        <!--#积分兑换 -->

        <!--右部 end--> 

 

这部分代码就是实现积分兑换的代码。

到此,对接所有功能就应该完成了。

 

 

 

 

 

此文档为支付宝通用登录接口ecshop整合文档: 1.在ecshop数据库的用户表中添加alipay_uid字段; 2.在用户登陆的模板中需放置链接:<a href=\'alipay/index.php\'>支付宝登陆</a> 3.本程序只是一个示例参考,在使用中可以更改; 4.本程序是在原支付宝通用登录接口示例基础上修改,仅供参考使用; ─────── 代码文件结构 ─────── alipay │ ├alipay_function.php┈┈┈┈┈公用函数类文件 │ ├alipay_notify.php┈┈┈┈┈┈支付宝通知处理类文件 │ ├log.txt┈┈┈┈┈┈┈┈┈┈┈日志文件 │ ├alipay_config.php┈┈┈┈┈┈基础信息配置文件 │ ├index.php┈┈┈┈┈┈┈┈┈┈支付宝登陆 │ ├return.php ┈┈┈┈┈┈┈┈┈页面跳转同步通知文件 │ └readme.txt ┈┈┈┈┈┈┈┈┈使用说明文本 alipay_config.php文件修要进行配置 //设置账户相关信息 //合作身份者ID,以2088开头由16位纯数字组成的字符串 $partner = ""; //安全检验码,由数字和字母组成的32位字符串 $key = ""; //会员登录后跳转的页面 要用 http://格式的完整路径,不允许加?id=123这类自定义参数 $return_url = "http://localhost/alipay/return.php"; //字符编码格式 目前支持 gbk 或 utf-8 $_input_charset = "utf-8"; //访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http $transport = "http"; //签名方式 不需修改 $sign_type = "MD5";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值