商派ecshop的短信服务二次开发

 
0 2733
泡沫随风飘
2015-08-28 23:04

商派ecshop的短信服务二次开发

土豪公司的一个土豪朋友买了商派ECShop的商业授权,激活了短信服务,但短信服务只在pc端使用。ectouch中使用的话需要进行二次开发。
在ecshop后台的云服务中心下的短信服务中心可以找到短信接口的api,但很遗憾和ecshop中includes\cls_sms.php使用的不同。

这里需要的是appkey及appsecret

这里需要的是appkey及appsecret


而这里传输的是entId、entPwd参数

而这里传输的是entId、entPwd参数


那么久只有按照cls_sms.php的方法组装参数,调用接口,主要参数可以在数据库中shop_config中找到:
四个参数是激活短信服务,商派那边技术人员填写的


这几个参数就在类文件中获得


忙了一两个小时,在ectouch中修改完成短信类\mobile\include\library\EcsSms.class.php,总是测试不通过,返回10021错误代码(系统错误),但在ecshop中能够正常使用。

组装的数据(敏感信息用*号代替)

Array

(

    [sendType] => notice

    [contents] => [{"phones":"1811***7**2","content":"\u60a8\u7684\u8ba2\u53552015091548652\u5df2\u4e8e09\u670815\u65e59\u65f6\u53d1\u8d27"}]

    [certi_app] => sms.send

    [entId] => 11011*******

    [entPwd] => 0b643***************7****

    
  •  => 11****

        [source] => *******

        [use_backlist] => 1

        [version] => 1.0

        [format] => json

        [timestamp] => 1442321216

        [certi_ac] => f5ba*******e770*******

    )
  • 返回的数据:

        Array

        (

            [msg] => 10021

            [res] => fail

            [info] => Traceback (most recent call last):

          File "/data/httpd/api.sms.shopex.cn/core/send.py", line 96, in check

            if not self._qianmingcheck() :  return (False,10008,'qianming is error or exists')

          File "/data/httpd/api.sms.shopex.cn/core/send.py", line 485, in _qianmingcheck

            print md5("smssigns_%s"%signs[0])

        IndexError: list index out of range

        )

    看原因应该是缺少signs变量的值(IndexError: list index out of range),但抓取ecshop正常发送短信时的组装参数后,一对比没有缺少参数。最后,什么方法都用了,甚至用错误的entId和entPwd,返回值依然是一层不变的10021错误。询问商派技术人员,但人家回复不提供二次开发服务。太坑人了,一个网站难道还需要买两套短信服务吗(ecshop和ectouch默认的短信服务都不一样)。当然也有可能是我这边错误,我菜鸟一个,大虾别喷,有开发经验的麻烦告知,感激不尽!

    最后,没法,土豪朋友已经买了短信服务了。只有在ecshop下做一个接口,由ectouch中的EcsSms.class.php调用,实现ectouch发送短信。

    • 在ecshop根目录下新建文件sendSms.php,代码如下(关键信息用*号替代,因为只是内部调用,只用了简单验证)

    <?php

    define('IN_ECS', true);

    $key = "********";

    $getKey =isset($_GET["key"])? $_GET["key"]:"";

    if ($getKey == $key) {

        require(dirname(__FILE__) . '/includes/init.php');

        include_once('includes/cls_sms.php');

        $sms = new sms();

        $phones = isset($_GET["phones"])?$_GET["phones"]:"";

        $msg = isset($_GET["msg"])? $_GET["msg"]:"";

        $result = $sms->send($phones, $msg);

        $re = array();

        if (!$result) {

            $re["error"] = $sms->errors["server_errors"]["error_no"];

            $re["msg"] = $sms->errors["server_errors"]["error_msg"];

        } else {

            $re["error"] = 0;

        }

    } else {

        $re["error"] = 3001;

        $re["msg"] = "key错误";

    }

    header('Content-Type:application/json; charset=utf-8');

    exit(json_encode($re));
    • EcsSms.class.php 中去掉无关方法,改写send 方法。

        function send($phones,$msg,$send_date = '', $send_num = 1,$sms_type='',$version='1.0', &$sms_error = '')

        {

            //$msg="您的订单2015091548652已于09月15日9时发货 ";

            $url="http://***.***.com/sendSms.php?phones=".$phones."&msg=".$msg."&key=****";

            $response=file_get_contents($url);

            $result=json_decode($response,true);

            if(isset($result["error"]) && $result["error"]==0){

                return true;

            }else{

                $sms_error=$result["error"].$result["msg"];

                return false;

            }

        }

    搞定,菜鸟一个还望童鞋们多多指教。

    本文内容由互联网用户自发贡献,版权归作者所有,本站不拥有所有权也不承担相关法律责任。如需转载请按以下形式注明来源: 复制

    文章来源:阿里云牛优惠资讯网
    文章标题:商派ecshop的短信服务二次开发
    原文地址:https://aliyunnew.com/a/60.html
    发布时间:2015-08-28 23:04
    相关话题
    没有相关话题
    猜您喜欢
    回帖
    • 抢占沙发~~