待发短信

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

4001-021-502

工作时间

9:00-21:00

DBShopV3.3商城系统新增短信宝短信接口

DBShop企业级开源商城系统,使用PHP语言基于Laminas + Doctrine 2 组合框架开发完成。可定制、多终端、多场景、多支付、多货币;严谨的安全机制,可靠稳定;方便的操作管理,节约时间;清晰的权限分配,责任分明;便捷的更新处理,一键搞定;丰富的插件市场,扩展无限。小编带着大家一起开发DBShopV3.3的短信宝插件接口。我们使用的短信接口是我们短信宝短信群发平台的短信接口,我们短信宝短信群发平台非常稳定,发送速度快,注册就送测试短信,推荐大家使用。
1.首先打开项目module\Admin\src\Data\Common.php 文件,在586行增加以下代码

1
'smsbao'=> $translator->translate('短信宝'),

2.接着打开项目module\Admin\src\Service\Common\PhoneSms 目录,增加Smsbao.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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<?php
 
namespace Admin\Service\Common\PhoneSms;
 
 
use Admin\Data\Common;
use Laminas\Json\Json;
 
class Smsbao
{
 
    private $sendUrl = 'http://api.smsbao.com/sms?';
    private $smsConfig;
 
 
    /**
     * 设置短信
     * @param $smsConfig
     * @throws ClientException
     */
    public function setSmsConfig($smsConfig)
    {
        $this->smsConfig = $smsConfig;
    }
 
    /**
     * 发送短信
     * @param array $data
     * @return bool
     */
    public function sendPhoneSms(array $data)
    {
        $smsContent = $this->getSmsContent($data['typeCode'], $data['contentArray'], $data['templateCode']);
        if (empty($smsContent)) return;
        if (empty($data['phone'])) return;
        foreach ($data['phone'] as $phoneValue) {
            $this->sendSmsbao($phoneValue['number'], $smsContent);
        }
    }
 
    /**
     * 发送订单短信
     * @param array $data
     * @return bool
     */
    public function sendOrderPhoneSms(array $data)
    {
        $smsContent = $this->getSmsContent($data['typeCode'], $data['contentArray'], $data['templateCode']);
        if (empty($smsContent)) return;
        if (empty($data['phone'])) return;
 
        foreach ($data['phone'] as $phoneValue) {
            $this->sendSmsbao($phoneValue['number'], $smsContent);
        }
    }
 
      /**
     * 发送短信方法
     * @param $phone
     * @param $content
     * @return array|bool|string|null
     */
    private function sendSmsbao($phone, $content)
    {
        $statusStr = array(
                "0" => "短信发送成功",
                "-1" => "参数不全",
                "-2" => "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间!",
                "30" => "密码错误",
                "40" => "账号不存在",
                "41" => "余额不足",
                "42" => "帐户已过期",
                "43" => "IP地址限制",
                "50" => "内容含有敏感词",
                "51" => "手机号码不正确"
            );
 
        try {
            $user = $this->smsConfig['sms_id'];
            $pass = $this->smsConfig['sms_secret'];
            $content = '【'.$this->smsConfig['sms_sign_name'].'】'.$content;
            $sendurl = $this->sendUrl."u=".$user."&p=".$pass."&m=".$phone."&c=".urlencode($content);
            $result = $this->curl_get($sendurl);
            return $statusStr[$result];
        catch (\Exception $e) {
            return null;
        }
 
        return null;
    }
 
     private function curl_get($sendurl){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $sendurl);
        curl_setopt($ch, CURLOPT_TIMEOUT, 1);
        curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }
 
 
 
      /**
     * 获取短信内容
     * @param $type
     * @param $data
     * @param $templateCode
     * @return string
     */
    private function getSmsContent($type, $data, $templateCode)
    {
        $TemplateCodeContent = '';
        switch ($type) {
            case 'captcha':
                $TemplateCodeContent = str_replace('{code}', $data['phoneCaptcha'], $templateCode);
                break;
            case 'addOrder':
                $TemplateCodeContent = str_replace(['{buyName}''{orderSn}''{orderTotal}'], [$data['buyName'], $data['orderSn'], $data['orderTotal']], $templateCode);
                break;
            case 'cancelOrder':
                $TemplateCodeContent = str_replace(['{buyName}''{orderSn}''{orderTotal}'], [$data['buyName'], $data['orderSn'], $data['orderTotal']], $templateCode);
                break;
            case 'paymentOrder':
                $TemplateCodeContent = str_replace(['{buyName}''{orderSn}''{orderTotal}'], [$data['buyName'], $data['orderSn'], $data['orderTotal']], $templateCode);
                break;
            case 'shipOrder':
                $TemplateCodeContent = str_replace(['{buyName}''{orderSn}''{orderTotal}''{deliveryName}''{expressNumber}'], [$data['buyName'], $data['orderSn'], $data['orderTotal'], $data['deliveryName'], $data['expressNumber']], $templateCode);
                break;
            case 'receiptOrder':
                $TemplateCodeContent = str_replace(['{buyName}''{orderSn}''{orderTotal}''{deliveryName}''{expressNumber}'], [$data['buyName'], $data['orderSn'], $data['orderTotal'], $data['deliveryName'], $data['expressNumber']], $templateCode);
                break;
        }
 
        return $TemplateCodeContent;
    }
}

3.接着替换module\Admin\view\admin\message-notification\index.phtml 文件

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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<div class="content-wrapper">
    <?php
    $form = $this->form;
    $form->prepare();
    ?>
    <?php echo $this->form()->openTag($form); ?>
    <section class="content-header">
        <?php echo $this->partial('layout/breadcrumb'); ?>
 
        <h1 class="pull-right" id="dbshop-menu-top">
            <button type="submit" class="btn btn-primary btn-sm"><i class="fa fa-check"></i> <?php echo $this->translate('保存设置'); ?></button>
            <?php echo $this->HelpUrl('phoneMessage'); ?>
        </h1>
    </section>
 
    <section class="content">
        <div class="row">
            <div class="col-md-12">
                <div class="nav-tabs-custom">
                    <ul class="nav nav-tabs">
                        <li class="active"><a href="#tab_1" data-toggle="tab"><?php echo $this->translate('管理员提醒'); ?></a></li>
                        <li><a href="#tab_2" data-toggle="tab"><?php echo $this->translate('订单提醒'); ?></a></li>
                        <li><a href="#tab_3" data-toggle="tab"><?php echo $this->translate('其他提醒'); ?></a></li>
                    </ul>
                    <div class="tab-content">
                        <?php echo $this->partial('layout/messages'); ?>
                        <div class="tab-pane active" id="tab_1">
                            <div class="box-body">
                                <div class="form-group">
                                    <label class="col-sm-2 control-label"><?php echo $this->translate('管理员手机号码'); ?></label>
                                    <?php if(count($this->phoneArea) == 1) { ?>
                                        <div class="col-sm-3">
                                            <?php echo $this->formElement($form->get('areaCode')); ?>
                                            <?php echo $this->formElementErrors($form->get('areaCode'), ['class'=>'error-message']); ?>
                                            <?php echo $this->formElement($form->get('adminPhone')); ?>
                                            <?php echo $this->formElementErrors($form->get('adminPhone'), ['class'=>'error-message']); ?>
                                        </div>
                                    <?php } else { ?>
                                        <div class="col-sm-2">
                                            <?php echo $this->formElement($form->get('areaCode')); ?>
                                            <?php echo $this->formElementErrors($form->get('areaCode'), ['class'=>'error-message']); ?>
                                        </div>
                                        <div class="col-sm-3">
                                            <?php echo $this->formElement($form->get('adminPhone')); ?>
                                            <?php echo $this->formElementErrors($form->get('adminPhone'), ['class'=>'error-message']); ?>
                                        </div>
                                    <?php } ?>
                                </div>
                                <div class="form-group">
                                    <label class="col-sm-2 control-label"><?php echo $this->translate('接收短信'); ?></label>
                                    <div class="col-sm-6">
                                        <?php echo $this->formElement($form->get('adminPhoneSend')); ?>
                                        <?php echo $this->formElementErrors($form->get('adminPhoneSend'), ['class'=>'error-message']); ?>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="tab-pane" id="tab_2">
                            <div class="box-body">
                                <div class="alert alert-info alert-dismissible">
                                    <?php if($this->smsConfig['sms_service_provider'] == 'aliSms') { ?>目前官方提供的可设置标签有 ${buyName} 购买人、${orderSn} 订单编号、${orderTotal} 订单金额、${deliveryName} 快递名称、${expressNumber} 快递单号<?php } ?>
                                    <?php if($this->smsConfig['sms_service_provider'] == 'huyiSms') { ?>目前官方提供的可设置标签有 {buyName} 购买人、{orderSn} 订单编号、{orderTotal} 订单金额、{deliveryName} 快递名称、{expressNumber} 快递单号。<br>互亿短信服务已内置模板,模板ID只需要填写1,不为空即是启用。<?php } ?>
                                    <?php if($this->smsConfig['sms_service_provider'] == 'tencentSms') { ?>目前官方提供的可设置标签有 {1} 购买人、{2} 订单编号、{3} 订单金额、{4} 快递名称、{5} 快递单号<?php } ?>
                                    <?php if($this->smsConfig['sms_service_provider'] == 'smsbao') { ?>目前官方提供的可设置标签有 {buyName} 购买人、{orderSn} 订单编号、{orderTotal} 订单金额、{deliveryName} 快递名称、{expressNumber} 快递单号。<?php } ?>
                                </div>
                                <div class="form-group">
                                    <label class="col-sm-2 control-label"><?php echo $this->translate('订单提交模板ID'); ?></label>
                                    <div class="col-sm-3">
                                        <?php echo $this->formElement($form->get('addOrderSmsTemplateId')); ?>
                                        <?php echo $this->formElementErrors($form->get('addOrderSmsTemplateId'), ['class'=>'error-message']); ?>
                                    </div>
                                    <p class="form-control-static small">
                                        <?php if($this->smsConfig['sms_service_provider'] == 'smsbao') { ?>模板示例:亲爱的{buyName},您的订单已提交,订单金额为{orderTotal},请及时进行后续处理<?php } ?>
                                    </p>
                                </div>
                                <div class="form-group">
                                    <label class="col-sm-2 control-label"><?php echo $this->translate('订单付款模板ID'); ?></label>
                                    <div class="col-sm-3">
                                        <?php echo $this->formElement($form->get('paymentOrderSmsTemplateId')); ?>
                                        <?php echo $this->formElementErrors($form->get('paymentOrderSmsTemplateId'), ['class'=>'error-message']); ?>
                                    </div>
                                    <p class="form-control-static small">
                                        <?php if($this->smsConfig['sms_service_provider'] == 'smsbao') { ?>模板示例:亲爱的{buyName},您的订单{orderSn},金额{orderTotal},已经付款完成<?php } ?>
                                    </p>
                                </div>
                                <div class="form-group">
                                    <label class="col-sm-2 control-label"><?php echo $this->translate('订单发货模板ID'); ?></label>
                                    <div class="col-sm-3">
                                        <?php echo $this->formElement($form->get('shipOrderSmsTemplateId')); ?>
                                        <?php echo $this->formElementErrors($form->get('shipOrderSmsTemplateId'), ['class'=>'error-message']); ?>
                                    </div>
                                    <p class="form-control-static small">
                                        <?php if($this->smsConfig['sms_service_provider'] == 'smsbao') { ?>模板示例:亲爱的{buyName},您的订单{orderSn},已由快递{deliveryName}发出,快递单号{expressNumber}<?php } ?>
                                    </p>
                                </div>
                                <div class="form-group">
                                    <label class="col-sm-2 control-label"><?php echo $this->translate('订单收货模板ID'); ?></label>
                                    <div class="col-sm-3">
                                        <?php echo $this->formElement($form->get('receiptOrderSmsTemplateId')); ?>
                                        <?php echo $this->formElementErrors($form->get('receiptOrderSmsTemplateId'), ['class'=>'error-message']); ?>
                                    </div>
                                    <p class="form-control-static small">
                                        <?php if($this->smsConfig['sms_service_provider'] == 'smsbao') { ?>模板示例:亲爱的{buyName},您的订单{orderSn},已经签收<?php } ?>
                                    </p>
                                </div>
                                <div class="form-group">
                                    <label class="col-sm-2 control-label"><?php echo $this->translate('订单取消模板ID'); ?></label>
                                    <div class="col-sm-3">
                                        <?php echo $this->formElement($form->get('cancelOrderSmsTemplateId')); ?>
                                        <?php echo $this->formElementErrors($form->get('cancelOrderSmsTemplateId'), ['class'=>'error-message']); ?>
                                    </div>
                                    <p class="form-control-static small">
                                        <?php if($this->smsConfig['sms_service_provider'] == 'smsbao') { ?>模板示例:亲爱的{buyName},您的订单{orderSn},已经取消<?php } ?>
                                    </p>
                                </div>
                            </div>
                        </div>
                        <div class="tab-pane" id="tab_3">
                            <div class="box-body">
                                <div class="alert alert-info alert-dismissible">
                                    <?php echo $this->translate('用户 注册、登录 验证码,除了启用 短信服务,还需要在 客户设置 勾选 手机号码和手机验证码。互亿短信服务已内置模板,模板ID只需要填写1,不为空即是启用。'); ?>
                                </div>
                                <div class="form-group">
                                    <label class="col-sm-2 control-label"><?php echo $this->translate('验证码模板ID'); ?></label>
                                    <div class="col-sm-3">
                                        <?php echo $this->formElement($form->get('captchaSmsTemplateId')); ?>
                                        <?php echo $this->formElementErrors($form->get('captchaSmsTemplateId'), ['class'=>'error-message']); ?>
                                    </div>
                                    <p class="form-control-static small">
                                        <?php if($this->smsConfig['sms_service_provider'] == 'aliSms') { ?>${code} 验证码<?php } ?>
                                        <?php if($this->smsConfig['sms_service_provider'] == 'huyiSms') { ?>{code} 验证码<?php } ?>
                                        <?php if($this->smsConfig['sms_service_provider'] == 'smsbao') { ?>模板示例:您的验证码:{code},15分钟内有效,请勿将验证码泄露给他人,如非本人操作请忽略<?php } ?>
                                        <?php if($this->smsConfig['sms_service_provider'] == 'tencentSms') { ?>{1} 验证码<?php } ?>
                                    </p>
                                </div>
                                <div class="form-group">
                                    <label class="col-sm-2 control-label"><?php echo $this->translate('后台余额变更模板ID'); ?></label>
                                    <div class="col-sm-3">
                                        <?php echo $this->formElement($form->get('balanceSmsTemplateId')); ?>
                                        <?php echo $this->formElementErrors($form->get('balanceSmsTemplateId'), ['class'=>'error-message']); ?>
                                    </div>
                                    <p class="form-control-static small">
                                        <?php if($this->smsConfig['sms_service_provider'] == 'aliSms') { ?>${userName} 客户名称、${changeTime} 变动时间、${changeAmountType} 变动类型、${changeUserAmount} 变动金额、${userAmount} 变动后总额<?php } ?>
                                        <?php if($this->smsConfig['sms_service_provider'] == 'huyiSms') { ?>需自行添加 短信模板。<?php } ?>
                                        <?php if($this->smsConfig['sms_service_provider'] == 'smsbao') { ?>{userName} 客户名称、{changeTime} 变动时间、{changeAmountType} 变动类型、{changeUserAmount} 变动金额、{userAmount} 变动后总额<?php } ?>
                                        <?php if($this->smsConfig['sms_service_provider'] == 'tencentSms') { ?>{1} 客户名称、{2} 变动时间、{3} 变动类型、{4} 变动金额、{5} 变动后总额<?php } ?>
                                    </p>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </section>
    <?php echo $this->form()->closeTag(); ?>
</div>

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

报备一下短信宝的VIP模板,这样就可以走短信宝的优质通道了,即便遇到敏感文字我们都不会人工审核,短信内容3~5秒就可送达。

另外:我们已经开发好完整的DBShop商城系统短信宝插件,点击此链接 下载及查看安装流程。

开源插件

最新更新

电商类

CMS类

微信类

文章标签