待发短信

在线客服
产品支持 短信宝客服
合作渠道 渠道合作
服务咨询

4001-021-502

工作时间

9:00-21:00

TPshop商城替换短信接口

TPshop是用thinkphp开发的一款免费开源网店系统,二次开发非常方便,代码清晰简洁,通俗易懂,丰富的插件和多套模板支持,易扩展,是目前国内首家最为完善的开源商城系统。系统支持多语言版本,操作简单,安全稳定,是广大用户二次开发的最佳选择,我以替换短信接口为例,一步一步的手把手教大家开发过程,我们短信宝短信平台非常稳定,而且快速,注册还送免费测试短信,大家可以在我们短信宝平台注册一个账号,进行测试。

首先我们要更换后台的显示界面文件。打开模版文件,替换一下模版文件。打开项目/application/admin/view2/system/sms.html文件,修改代码26~56行,代码如下图所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<div class="explanation" id="explanation">
    <div class="title" id="checkZoom"><i class="fa fa-lightbulb-o"></i>
    <h4 title="提示相关设置操作时应注意的要点">操作提示</h4>
    <span id="explanationZoom" title="收起提示"></span></div>
    <ul>
        <li>系统平台全局设置,包括基础设置、购物、短信、邮件、水印和分销等相关模块。</li>
        <li>短信宝的官网:https://www.smsbao.com</li>
        <li>有任何疑问,请咨询短信宝客服</li>
    </ul>
</div>
<form method="post" enctype="multipart/form-data" name="form1" action="{:U('System/handle')}">
    <input type="hidden" name="inc_type" value="{$inc_type}">
    <div class="ncap-form-default">
        <dl class="row">
            <dt class="tit">
                <label for="sms_appkey">短信宝账号</label>
            </dt>
            <dd class="opt">
                <input id="sms_appkey" name="sms_appkey" value="{$config.sms_appkey}" class="input-txt" type="text"/>
                <p class="notic">短信宝的用户名,还未注册短信宝的用户请点击<a href="https://www.smsbao.com/reg" target="_blank">免费注册</a></p>
            </dd>
        </dl>
        <dl class="row">
            <dt class="tit">
                <label for="sms_secretKey">短信宝密码</label>
            </dt>
            <dd class="opt">
                <input id="sms_secretKey" name="sms_secretKey" value="{$config.sms_secretKey}" class="input-txt" type="password"/>
                <p class="notic">短信宝账号密码</p>
            </dd>
        </dl>
    </div>
</form>

项目/application/admin/view2/sms_template/sms_template_list.html文件,修改代码6~13行,代码如下图所示:

?
1
2
3
4
5
6
7
8
<div class="fixed-bar">
    <div class="item-title"
        <div class="subject">
            <h3>短信配置模板</h3>
            <h5>短信宝(https://www.smsbao.com)短信配置模板短信配置模板</h5>
        </div>
    </div>
</div>

项目/application/admin/view2/sms_template/_sms_template.html文件,修改代码15~61行,代码如下图所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<form class="form-horizontal" id="addEditSmsTemplate" method="post">
    <div class="ncap-form-default">
        <dl class="row">
            <dt class="tit"> <label for="sms_sign"><em>*</em>短信签名</label>
            </dt>
            <dd class="opt">
                <input type="text" value="{$smsTpl.sms_sign}" name="sms_sign" id="sms_sign" class="input-txt">
                <span class="err" id="err_sms_sign" style="display:none;">短信签名不能为空 </span>
                <p class="notic">短信的签名,如smsbao,签名不能包含特殊字符,长度3-8个字符。</p>
            </dd>
        </dl>
        <dl class="row">
            <dt class="tit">
                <label for="send_scene"><em>*</em>发送场景</label>
            </dt>
            <dd class="opt">
                <if condition="$send_scene_id gt 0 ">
                {$send_name}
                    <input type="hidden" value="{$send_scene_id}" name="send_scene" id="send_scene" class="form-control" style="width:250px;"/>
                <else />
                    <select  class="small form-control" name="send_scene" id="send_scene" onchange="changeContent(this.value);">
                        <option value="-1">请选择使用场景</option>
                        <foreach name="send_scene" item="v" key="k">
                            <option value="{$k}" <if condition=" $k eq $smsTpl.send_scene ">selected="selected"</if>>{$v[0]}</option>
                        </foreach>
                    </select>
                    <span class="err" id="err_send_scene" style="display:none;">请选择使用场景</span>
                </if>
                <span class="err"></span>
                <p class="notic">使用场景</p>
            </dd>
        </dl>
        <dl class="row">
            <dt class="tit">
                <label for="tpl_content"><em>*</em>短信模板内容</label>
            </dt>
            <dd class="opt">
                <textarea id="tpl_content" name="tpl_content" class="tarea" rows="6" readonly="readonly">{$smsTpl.tpl_content}</textarea>
                <span class="err" id="err_tpl_content" style="display:none;">短信模板内容不能为空</span>
                <p class="notic">短信的模板内容</p>
            </dd>
        </dl>
    <div class="bot"><a href="JavaScript:void(0);" onclick="checkForm();" class="ncap-btn-big ncap-btn-green" id="submitBtn">确认提交</a></div>
</div>
<input type="hidden" name="tpl_id" value="{$smsTpl.tpl_id}"></label>
</form>

经过替换之后,所有的显示都变成短信宝短信平台的了,第一步完成。接下来替换发送短信的接口文件,项目/application/home/controller/Api.php文件。在这个文件中添加一个发送方法,代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/**
 * 前端发送短信方法: APP/WAP/PC 共用发送方法
 */
public function send_validate_code(){
 
    $this->send_scene = C('SEND_SCENE');
 
    $type = I('type');
    $scene = I('scene');    //发送短信验证码使用场景
    $mobile = I('mobile');
    $sender = I('send');
    $verify_code = I('verify_code');
    $mobile = !empty($mobile) ?  $mobile $sender ;
    $session_id = I('unique_id' , session_id());
    session("scene" $scene);
    //注册
    if($scene == 1 && !empty($verify_code)){
        $verify new Verify();
        if (!$verify->check($verify_code'user_reg')) {
            ajaxReturn(array('status'=>-1,'msg'=>'图像验证码错误'));
        }
    }
    if($type == 'email'){
        //发送邮件验证码
        $logic new UsersLogic();
        $res $logic->send_email_code($sender);
        ajaxReturn($res);
    }else{
        //发送短信验证码
        $res = checkEnableSendSms($scene);
        if($res['status'] != 1){
            ajaxReturn($res);
        }
        //判断是否存在验证码
        $data = M('sms_log')->where(array('mobile'=>$mobile,'session_id'=>$session_id'status'=>1))->order('id DESC')->find();
        //获取时间配置
        $sms_time_out = tpCache('sms.sms_time_out');
        $sms_time_out $sms_time_out $sms_time_out : 120;
        //120秒以内不可重复发送
        if($data && (time() - $data['add_time']) < $sms_time_out){
            $return_arr array('status'=>-1,'msg'=>$sms_time_out.'秒内不允许重复发送');
            ajaxReturn($return_arr);
        }
        //随机一个验证码
        $code = rand(1000, 9999);
 
        $user = session('user');
        if ($scene == 6){
 
            if(!$user['user_id']){
                //登录超时
                ajaxReturn(array('status'=>-1,'msg'=>'登录超时'));
            }
            $params array('code'=>$code);
 
            if($user['nickname']){
                $params['user_name'] = $user['nickname'];
            }
        }
        $params['code'] =$code;
 
        //发送短信
        $resp $this->sendsms_smsbao($scene $mobile $params$session_id);
 
        if($resp == '0'){
            //发送成功, 修改发送状态位成功
            M('sms_log')->where(array('mobile'=>$mobile,'code'=>$code,'session_id'=>$session_id 'status' => 0))->save(array('status' => 1));
            $return_arr array('status'=>1,'msg'=>'发送成功,请注意查收');
        }else{
            $return_arr array('status'=>-1,'msg'=>'发送失败'.$resp);
        }
        ajaxReturn($return_arr);
    }
}
 
 
/**
 * 短信宝发送方法
 */
 private function sendsms_smsbao($scene,$sender $params$session_id){
     $product $config['sms_product'];
     $code = !empty($params['code']) ? $params['code'] : false;
     $consignee = !empty($params['consignee']) ? $params['consignee'] : false;
     $user_name =  !empty($params['user_name']) ? $params['user_name'] : false;
     $order_sn $params['order_sn'];
     $mobile = !empty($params['mobile']) ? $params['mobile'] : false;
     if(empty($unique_id)){
        $session_id = session_id();
     }else{
        $session_id $unique_id;
     }
     $smsParams array(
        1 => "{\"code\":\"$code\",\"product\":\"$product\"}"//1. 用户注册
        2 => "{\"code\":\"$code\"}"//2. 用户找回密码
        3 => "{\"consignee\":\"$consignee\",\"phone\":\"$mobile\"}",//3. 客户下单
        4 => "{\"order_sn\":\"$order_sn\"}",//4. 客户支付
        5 => "{\"user_name\":\"$user_name\",\"order_sn\":\"$order_sn\",\"consignee\":\"$consignee\"}",  //5.商家发货
        6 => "{\"user_name\":\"$user_name\",\"code\":\"$code\"}"//6. 修改手机号码
    );
 
    $smsParam $smsParams[$scene];
    //提取发送短信内容
    $scenes = C('SEND_SCENE');
    $msg $scenes[$scene][1];
    $params_arr = json_decode($smsParam);
    foreach ($params_arr as $k => $v) {
        $msg str_replace('${' $k '}'$v$msg);
    }
 
    //发送记录存储数据库
    $log_id = M('sms_log')->insertGetId(array('mobile' => $sender'code' => $code'add_time' => time(), 'session_id' => $session_id'status' => 0, 'scene' => $scene'msg' => $msg));
    $config = tpCache('sms');
    $sms_get_param['u']=$config['sms_appkey'];
    $sms_get_param['p']=md5($config['sms_secretKey']);
    $sms_get_param['m']=$sender;
    $sms_get_param['c']="【".$config['sms_product']."】".$msg;
    $resp=file_get_contents("http://api.smsbao.com/sms?".http_build_query($sms_get_param));
    if ($resp == '0') {
        M('sms_log')->where(array('id' => $log_id))->save(array('status' => 1)); //修改发送状态为成功
    }else{
        M('sms_log')->where(array('id' => $log_id))->update(array('error_msg'=>$resp)); //发送失败, 将发送失败信息保存数据库
    }
    return $resp;
 }

经过上面的替换,短信宝的短信平台已经替换成功了,可以正常使用了。

报备一下短信宝的VIP模版,这样就可以走短信宝的优质通道,并且免审核了,短信内容3~5秒就可送达。
开源插件

最新更新

电商类

CMS类

微信类

文章标签