待发短信

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

4001-021-502

工作时间

9:00-21:00

CRMEBV4.32新增短信宝短信接口

CRMEB商城系统是基于ThinkPhp6.0+Vue开发的一套新零售移动电商开源系统,包含商城、拼团、砍价、秒杀、优惠券、积分、分销等功能,更适合企业二次开发。今天小编就以新增短信接口为例,给大家讲解一下如何进行二次开发,使用的短信接口是我们短信宝短信群发平台的短信接口,我们短信宝短信群发平台的接口非常稳定,发送速度快,注册就送测试短信,推荐大家使用。
前提:执行以下sql语句增加短信宝配置

1
2
3
4
5
6
7
INSERT INTO `eb_system_config_tab` (`id`, `pid`, `title`, `eng_title`, `status`, `info`, `icon`, `type`, `sort`) VALUES ('100''0''短信配置''smsbao''1''0''ios-chatboxes''0''0');
INSERT INTO `eb_system_config` ( `menu_name`, `type`, `input_type`, `config_tab_id`, `parameter`, `upload_type`, `required`, `width`, `high`, `value`, `info`, `desc`, `sort`, `status`)
VALUES ('smsbao_user''text''input''100''', 0, '''100', 0, '''短信宝账号''短信宝账号''0''1');
INSERT INTO `eb_system_config` ( `menu_name`, `type`, `input_type`, `config_tab_id`, `parameter`, `upload_type`, `required`, `width`, `high`, `value`, `info`, `desc`, `sort`, `status`)
VALUES ('smsbao_pwd''text''input''100''', 0, '''100', 0, '''短信宝密码''短信宝密码''0''1');
INSERT INTO `eb_system_config` ( `menu_name`, `type`, `input_type`, `config_tab_id`, `parameter`, `upload_type`, `required`, `width`, `high`, `value`, `info`, `desc`, `sort`, `status`)
VALUES ('sms_sign_name''text''input''100''', 0, '''100', 0, '''短信签名''短信签名''0''1');

1:打开项目:config\sms.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
'smsbao'=>[
     'template_id' => [
                //验证码
                'VERIFICATION_CODE_TIME' => '您的验证码是code,有效期为time分钟。如非本人操作,可不用理会。',
                //支付成功
                'PAY_SUCCESS_CODE' => '您购买的商品已支付成功,支付金额pay_price元,订单号order_id,感谢您的光临!',
                //发货提醒
                'DELIVER_GOODS_CODE' => '亲爱的用户nickname您的商品store_name,订单号order_id已发货,请注意查收',
                //确认收货提醒
                'TAKE_DELIVERY_CODE' => '亲,您的订单order_id,商品store_name已确认收货,感谢您的光临!',
                //管理员下单提醒
                'ADMIN_PLACE_ORDER_CODE' => 'admin_name管理员,您有一笔已支付的订单待处理,订单号为order_id!',
                //管理员退货提醒
                'ADMIN_RETURN_GOODS_CODE' => 'admin_name管理员,您有一笔支付成功的订单待处理,订单号order_id!',
                //管理员支付成功提醒
                'ADMIN_PAY_SUCCESS_CODE' => 'admin_name管理员,您有一笔支付成功的订单待处理,订单号order_id!',
                //管理员确认收货
                'ADMIN_TAKE_DELIVERY_CODE' => 'admin_name管理员,您有一笔订单已经确认收货,订单号order_id!',
                //改价提醒
                'PRICE_REVISION_CODE' => '您的订单order_id,实际支付金额已被修改为pay_price',
                //订单未支付
                'ORDER_PAY_FALSE' => '您有未付款订单,订单号为:order_id,商品数量有限,请及时付款。',
             ],
        ]

2:打开项目:crmeb\services\sms\Sms.php 屏蔽掉invokeClass方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    // protected function invokeClass($class)
    // {
    //     if (!class_exists($class)) {
    //         throw new \RuntimeException('class not exists: ' . $class);
    //     }
    //     $this->getConfigFile();
 
    //     if (!$this->config) {
    //         $this->config = Config::get($this->configFile . '.stores.' . $this->name, []);
    //     }
 
    //     $handleAccessToken = new AccessTokenServeService($this->config['account'] ?? '', $this->config['secret'] ?? '');
    //     $handle = Container::getInstance()->invokeClass($class, [$this->name, $handleAccessToken, $this->configFile]);
    //     $this->config = [];
    //     return $handle;
    // }

3:打开项目:crmeb\services\sms\storage 新增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
<?php
 
namespace crmeb\services\sms\storage;
 
use crmeb\basic\BaseSms;
use think\exception\ValidateException;
use think\facade\Config;
 
class SmsBao extends BaseSms
{
    /**
     * accessKeyId
     * @var string
     */
    protected $accessKeyId;
    /**
     * accessKeySecret
     * @var string
     */
    protected $accessKeySecret;
    /**
     * 签名
     * @var string
     */
    protected $signName = '';
 
    protected $name = 'smsbao';
    /**
     * 状态
     * @var bool
     */
    protected $status;
    protected $templateIds = [];
    protected function initialize(array $config)
    {
        parent::initialize($config);
        $this->accessKeyId = sys_config('smsbao_user''');
        $this->accessKeySecret = sys_config('smsbao_pwd''');
        if ($this->accessKeyId && $this->accessKeySecret) {
            $this->status = true;
        else {
            $this->status = false;
        }
        $this->signName = $config['sign_name'] ?? null;
        if($this->signName == null){
            $this->signName  = sys_config('sms_sign_name''');
        }
        $this->templateIds = Config::get($this->configFile . '.stores.' . $this->name . '.template_id', []);
    }
    /**
     * 提取模板code
     * @param string $templateId
     * @return null
     */
    protected function getTemplateCode(string $templateId)
    {
        return $this->templateIds[$templateId] ?? null;
    }
    /**
     * 发送短信
     * @param $phone
     * @param $templateId
     * @param $data
     * @return bool|string
     */
    public function send($phone, $templateId, array $data = [])
    {
        $statusStr = array(
            "0" => "短信发送成功",
            "-1" => "参数不全",
            "-2" => "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间!",
            "30" => "密码错误",
            "40" => "账号不存在",
            "41" => "余额不足",
            "42" => "帐户已过期",
            "43" => "IP地址限制",
            "50" => "内容含有敏感词"
            );
 
        $smsapi = "http://api.smsbao.com/";
        $user = $this->accessKeyId;
        $pass = md5($this->accessKeySecret);
        $tmp = $this->getTemplateCode($templateId);
        $content = str_replace(array_keys($data),array_values($data),$tmp);
        $content = '【'.$this->signName.'】'.$content;
        $sendurl = $smsapi."sms?u=".$user."&p=".$pass."&m=".$phone."&c=".urlencode($content);
        $result = $this->fetchContent($sendurl,'POST','') ;
        try {
            if($result == '0'){
                return true;
            }else{
                throw new ValidateException($statusStr[$result]);
            }
        }catch (\Exception $e) {
            throw new ValidateException($e->getMessage());
        }
    }
 
    private function fetchContent($url, $method, $body) {
        $ch = curl_init();
 
        if($method == 'POST') {
            curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
            curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
        else {
            $url .= '?'.$body;
        }
 
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            "x-sdk-client" => "php/2.0.0"
        ));
 
        if(substr($url, 0,5) == 'https') {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        }
 
        $rtn = curl_exec($ch);
 
        if($rtn === false) {
            // 大多由设置等原因引起,一般无法保障后续逻辑正常执行,
            // 所以这里触发的是E_USER_ERROR,会终止脚本执行,无法被try...catch捕获,需要用户排查环境、网络等故障
            trigger_error("[CURL_" . curl_errno($ch) . "]: " . curl_error($ch), E_USER_ERROR);
        }
        curl_close($ch);
 
        return $rtn;
    }
}

4:打开项目:app\services\serve\ServeServices.php 修改驱动配置 大概在60行左右

1
2
3
4
5
6
7
8
9
10
    public function sms(array $config = [])
    {
        return app()->make(Sms::class, [    
            'smsbao',
        [
            'accessKeyId' => sys_config('smsbao_user'),
            'accessKeySecret' => sys_config('smsbao_pwd'),
            'signName' => sys_config('sms_sign_name'),
        ]]);
    }

经过上面的替换,短信宝的短信平台已经替换成功了,可以正常使用了。进行测试发送:

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

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

开源插件

最新更新

电商类

CMS类

微信类

文章标签