为easy-sms添加 百度云简单sms

百度云的sms发送更新了v3验证,但是easy-sms的还没有更新,这边急用,就自己写自定义gateways和message急用

环境:laravel7 

因为懒得看百度的认证方式,就直接用百度官方提供的sms示例的 generateAuthorization 获取 header 的 Authorization

(简单暴力,但是省事)

再利用composer自动导入:

跑一下: composer dump-auto 搞定

首先是自定义gateways 

MyBaiduGateWay.php
<?php


namespace App\Gateways;


use Carbon\Carbon;
use Overtrue\EasySms\Contracts\MessageInterface;
use Overtrue\EasySms\Contracts\PhoneNumberInterface;
use Overtrue\EasySms\Exceptions\GatewayErrorException;
use Overtrue\EasySms\Gateways\Gateway;
use Overtrue\EasySms\Support\Config;
use Overtrue\EasySms\Traits\HasHttpRequest;





class MyBaiduGateWay extends Gateway
{


    use HasHttpRequest;


    const ENDPOINT_HOST = 'smsv3.bj.baidubce.com';

    const ENDPOINT_URI = '/api/v3/sendSms';

    const DEFAULT_EXPIRATION_IN_SECONDS = 60; //签名有效期默认60秒


    const SUCCESS_CODE = 1000; ///1000表示成功

    public function send(PhoneNumberInterface $to, MessageInterface $message, Config $config)
    {
        $ak = $config->get('ak');
        $sk = $config->get('sk');
        $method = "POST";
        $params = array();
//        date_default_timezone_set('UTC');
//        Carbon::now()->setTimezone('UTC');
        $timestamp = new \DateTime('now',new \DateTimeZone('UTC'));
        $expirationInSeconds = self::DEFAULT_EXPIRATION_IN_SECONDS;
        $authorization = generateAuthorization($ak, $sk, $method, self::ENDPOINT_HOST, self::ENDPOINT_URI, $params, $timestamp, $expirationInSeconds);


        //组装请求头
        $timeStr = $timestamp->format("Y-m-d\TH:i:s\Z");
        $head =  array(
            "Content-Type"=>"application/json",
            "Authorization"=>$authorization,
            "x-bce-date"=>$timeStr,
        );

        //请求的参数
        $body = array(
            "signatureId"=> $message->getSignatureId(),	//  签名id
            "mobile"=> $to->getNumber(), // 接收号码
            "template"=> $message->getTemplate($this), // 模板id
            "contentVar"=> $message->getData($this),
        );

        $result = $this->request($method, self::buildEndpoint($config), ['headers' => $head, 'json' => ($body)]);

        if (self::SUCCESS_CODE != $result['code']) {
            throw new GatewayErrorException($result['message'], $result['code'], $result);
        }

        return $result;


    }





    /**
     * Build endpoint url.
     *
     * @param \Overtrue\EasySms\Support\Config $config
     *
     * @return string
     */
    protected function buildEndpoint(Config $config)
    {
        return 'http://'.$config->get('domain', self::ENDPOINT_HOST).self::ENDPOINT_URI;
    }


}

//设置完了之后是自定义消息:

MyBaiduMessage.php
<?php


namespace App\Custom\Message;

use Overtrue\EasySms\Contracts\GatewayInterface;
use Overtrue\EasySms\Message;

class MyBaiduMessage extends  Message
{


    /**
     * @var string
     */
    protected $signatureId;

    /**
     * 获取短信前民唯一id 例如:中资源bossedm的签名id
     * @param GatewayInterface|null $gateway
     * @return string
     */
    public function getSignatureId(GatewayInterface $gateway = null)
    {
        return is_callable($this->signatureId) ? call_user_func($this->signatureId, $gateway) : $this->signatureId;
    }


}

easysms.php

<?php


return [
    // HTTP 请求的超时时间(秒)
    'timeout' => 5.0,

    // 默认发送配置
    'default' => [
        // 网关调用策略,默认:顺序调用
        'strategy' => \Overtrue\EasySms\Strategies\OrderStrategy::class,

        // 默认可用的发送网关,由于百度云的已经升级v3了,所以自定义一个gatways
        'gateways' => [
            'mybaidugateway',
        ],
    ],
    // 可用的网关配置
    'gateways' => [
        'errorlog' => [
            'file' => '/tmp/easy-sms.log',
        ],
        'mybaidugateway' => [
            'ak' => '',//自己填写相应的key
            'sk' => '',//自己填写相应的key
            'domain' => 'smsv3.bj.baidubce.com',
        ],
    ],
];


然后就可以愉快的玩耍了:


 $easySms = new EasySms(config('easysms'));
        // 注册
        $easySms->extend('mybaidugateway', function ($gatewayConfig) {
            // $gatewayConfig 来自配置文件里的 `gateways.mygateway`
            return new MyBaiduGateWay($gatewayConfig);
        });

        $message_arr = [
            "signatureId"=> "sms-sign-slkfaknfe",//自己去写自己的id
            'template' => 'sms-tmpl-slkfaknfe',//模板
            'data' => [
                "msg"=> "你好,我是短信" // 模板变量
            ],
        ];
        $myBaiduMessage = new MyBaiduMessage($message_arr);
        $result = $easySms->send(18045338983,$myBaiduMessage );


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值