您的位置:首页 > 编程语言 > PHP开发

百度开放云简单消息服务 SMS php接口源码 解决lack of param templateId

2015-07-06 10:06 861 查看
百度开放云的文档较不完善,参照百度BOS源码和SMS API文档,完成php SMS接口,发现返回lack of param templateId,后来再用java sdk调试发现JAVA程序content-type不含charset=utf-8,去掉后果然正常使用接口。





<?php

/**

 * SMS接口类

 * 

 */

include 'BaiduBce.phar';

use BaiduBce\Auth\BceV1Signer;

use BaiduBce\Auth\SignOptions;

use BaiduBce\Bce;

use BaiduBce\BceClientConfigOptions;

use BaiduBce\BceBaseClient;

use BaiduBce\Exception\BceClientException;

use BaiduBce\Exception\BceServiceException;

use BaiduBce\Http\BceHttpClient;

use BaiduBce\Http\HttpHeaders;

use BaiduBce\Http\HttpContentTypes;

use BaiduBce\Http\HttpMethod;

use BaiduBce\Util\MimeTypes;

use BaiduBce\Util\HashUtils;

use BaiduBce\Util\HttpUtils;

use BaiduBce\Util\StringUtils;

use BaiduBce\Services\Bos\BosOptions;

class Sms extends BceBaseClient{

    /**

     * @var \BaiduBce\Auth\SignerInterface

     */

    private $signer;

    private $httpClient;

    /**

     * 

     * 

     * @param array  $config 配置

     */

    public function __construct() {

        /* 配置 */

        $config = array(

            'credentials' => array(

                'ak' => '',

                'sk' => '',

            ),

            'endpoint' => 'http://sms.bj.baidubce.com',

        );

        parent::__construct($config, 'sms');

        $this->signer = new BceV1Signer();

        $this->httpClient = new BceHttpClient();

        

    }

    public function sendsms($options= array(),$param=array()){

    list($config) = $this->parseOptions($options, BosOptions::CONFIG);

    return $this->sendRequest(

            HttpMethod::POST,

            array(BosOptions::CONFIG => $config,'body' =>'{"templateId":"'.$param['templateId'].'","receiver":["'.$param['receiver'].'"],"contentVar":"{\"code\":\"'.$param['code'].'\"}"}' )

        );

    }

    /**

     * Create HttpClient and send request

     * @param string $httpMethod The Http request method

     * @param array $varArgs The extra arguments

     * @return mixed The Http response and headers.

     */

    private function sendRequest($httpMethod, array $varArgs)

    {

        $defaultArgs = array(

            BosOptions::CONFIG => array(),

            'body' => null,

            'headers' => array(),

            'params' => array(),

            'outputStream' => null,

            'parseUserMetadata' => false

        );

        $args = array_merge($defaultArgs, $varArgs);

        $config = $this->config;

        if (!isset($args['headers'][HttpHeaders::CONTENT_TYPE])) {

            $args['headers'][HttpHeaders::CONTENT_TYPE] ='application/json';

        }

        $response = $this->httpClient->sendRequest(

            $config,

            $httpMethod,

            '/v1/message',

            $args['body'],

            $args['headers'],

            $args['params'],

            $this->signer,

            $args['outputStream']

        );

        if ($args['outputStream'] === null) {

            $result = $this->parseJsonResult($response['body']);

        } else {

            $result = new \stdClass();

        }

        $result->metadata =

            $this->convertHttpHeadersToMetadata($response['headers']);

        if ($args['parseUserMetadata']) {

            $userMetadata = array();

            foreach ($response['headers'] as $key => $value) {

                if (StringUtils::startsWith($key, HttpHeaders::BCE_USER_METADATA_PREFIX)) {

                    $key = substr($key, strlen(HttpHeaders::BCE_USER_METADATA_PREFIX));

                    $userMetadata[urldecode($key)] = urldecode($value);

                }

            }

            $result->metadata[BosOptions::USER_METADATA] = $userMetadata;

        }

        return $result;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  百度 开放 php sdk api