Forest


  • 首页

  • 分类

  • 关于

  • 归档

阿里云短信接口封装

发表于 2017-09-28 | 分类于 Php

一、下载阿里云发送短信phpsdk

1
2
下载地址:
https://help.aliyun.com/document_detail/55359.html?spm=5176.doc55451.6.569.0uXt4J

二、复制文件

1
将php/api_sdk文件夹下的文件放到你的应用程序文件中

三、封装短信发送类

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
namespace Common\Lib\Pclass;
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
use Aliyun\Api\Sms\Request\V20170525\QuerySendDetailsRequest;
class WebSender
{
/**
* 初始化操作
*/
public function __construct()
{
require_once VENDER_PATH . 'Alisms/vendor/autoload.php';
// 加载区域结点配置
Config::load();
$accessKeyId = '你的accessKeyId';
$accessKeySecret = '你的accessKeySecret';
// 短信API产品名
$product = "Dysmsapi";
// 短信API产品域名
$domain = "dysmsapi.aliyuncs.com";
// 暂时不支持多Region
$region = "cn-hangzhou";
// 服务结点
$endPointName = "cn-hangzhou";
// 初始化用户Profile实例
$profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
// 增加服务结点
DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);
// 初始化AcsClient用于发起请求
$this->acsClient = new DefaultAcsClient($profile);
}
/**
* 发送短信范例
*
* @param string $signName <p>
* 必填, 短信签名,应严格"签名名称"填写,参考:<a href="https://dysms.console.aliyun.com/dysms.htm#/sign">短信签名页</a>
* </p>
* @param string $templateCode <p>
* 必填, 短信模板Code,应严格按"模板CODE"填写, 参考:<a href="https://dysms.console.aliyun.com/dysms.htm#/template">短信模板页</a>
* (e.g. SMS_0001)
* </p>
* @param string $phoneNumbers 必填, 短信接收号码 (e.g. 12345678901)
* @param array|null $templateParam <p>
* 选填, 假如模板中存在变量需要替换则为必填项 (e.g. Array("code"=>"12345", "product"=>"阿里通信"))
* </p>
* @param string|null $outId [optional] 选填, 发送短信流水号 (e.g. 1234)
* @return stdClass
*/
public function sendSms($signName, $templateCode, $phoneNumbers, $templateParam = null, $outId = null)
{
// 初始化SendSmsRequest实例用于设置发送短信的参数
$request = new SendSmsRequest();
// 必填,设置雉短信接收号码
$request->setPhoneNumbers($phoneNumbers);
// 必填,设置签名名称
$request->setSignName($signName);
// 必填,设置模板CODE
$request->setTemplateCode($templateCode);
// 可选,设置模板参数
if($templateParam) {
$request->setTemplateParam(json_encode($templateParam));
}
// 可选,设置流水号
if($outId) {
$request->setOutId($outId);
}
// 发起访问请求
$acsResponse = $this->acsClient->getAcsResponse($request);
// 打印请求结果
// var_dump($acsResponse);
return $acsResponse;
}
/**
* 查询短信发送情况范例
*
* @param string $phoneNumbers 必填, 短信接收号码 (e.g. 12345678901)
* @param string $sendDate 必填,短信发送日期,格式Ymd,支持近30天记录查询 (e.g. 20170710)
* @param int $pageSize 必填,分页大小
* @param int $currentPage 必填,当前页码
* @param string $bizId 选填,短信发送流水号 (e.g. abc123)
* @return stdClass
*/
public function queryDetails($phoneNumbers, $sendDate, $pageSize = 10, $currentPage = 1, $bizId=null)
{
// 初始化QuerySendDetailsRequest实例用于设置短信查询的参数
$request = new QuerySendDetailsRequest();
// 必填,短信接收号码
$request->setPhoneNumber($phoneNumbers);
// 选填,短信发送流水号
$request->setBizId($bizId);
// 必填,短信发送日期,支持近30天记录查询,格式Ymd
$request->setSendDate($sendDate);
// 必填,分页大小
$request->setPageSize($pageSize);
// 必填,当前页码
$request->setCurrentPage($currentPage);
// 发起访问请求
$acsResponse = $this->acsClient->getAcsResponse($request);
// 打印请求结果
// var_dump($acsResponse);
return $acsResponse;
}
}

四、调用短信发送方法

1
2
3
4
5
6
use Common\Lib\Pclass\WebSender;
你的业务逻辑
$WebSender = new WebSender();
$response = $WebSender->sendSms("短信签名", "短信模板id", "接收短信的手机号", "短信模板中的变量值数组", "自定义标识-发送短信流水号");
print_r($response, true);

完成调用

在路上

发表于 2017-09-06 | 分类于 随笔

在路上

每天都在路上,不是去公司的路上,就是回家的路上
在路上,有很多选择,看电影,看小说,又或者被人群推挤、在想办法挤出能够看电影看小说的空间
好容易到了星期五,没有了最初的心情躁动地等待6点半到来,而是平静娴熟地提交调休申请、拿起行李、走出公司大门,在去地铁的路上买上两个馒头,快速跑动中把馒头消化,坐上3号线地铁,看看时间,心里舒了一口气……
粗略计算,每个月将近走3000公里,45个小时,我想,等以后老了,我可能可以理直气壮的跟别人吹牛说我绕地球走了多少圈。
在路上,爱奇艺评分8.5分以上的电影都看过了,从这些电影里学到不少东西,心里也受到不同程序的冲击。
在路上,看书,从不同的角度看世界,跟着作者的思绪体会不一样的思维,也蛮好
在路上,活到老,学到老

但行好事,莫问前程

发表于 2017-09-05 | 分类于 爱情

对话

你问我每周这样跑来跑去,会不会觉得累。我说但行其事,莫问前程

心声

1
2
3
4
5
6
7
8
9
10
11
我心里对累并没有什么定义,只是周末时间过得太快
我不能让自己闲下来,因为闲下来的感觉很可怕
看书看电影学习锻炼身体,每天都比昨天好一点点,这感觉很好
一个人,当然负面情绪也少不了,遇事冷静,告诉自己这都是小事
猝然临之而不惊,无故加之而不怒,成长伴随着阵痛,却让你更加从容
看到宝妈和宝宝,心里很是欣慰,生活简单,如此而已

旁白

1
2
3
生活,或许有更好的选择,或许有更容易走的路,但那不是我心里的路。
走我想走的路,不关心终点在哪,但行好事,莫问前程

相信憧憬

发表于 2017-08-17 | 分类于 爱情

电影《美丽心灵》

电影《美丽心灵》中的一段对话,男主向女主求婚,女主问男主为何向她求婚,男主是典型理工男,答不出来,于是有了以下对话

原文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Alicia: How big is the universe?
Nash: Infinite.
Alicia: How do you know?
Nash: I know because all the data indicates it's infinite.
Alicia: But it hasn't been proven yet.
Nash: No.
Alicia: You haven't seen it.
Nash: No.
Alicia: How do you know for sure?
Nash: I don't, I just believe it.
Alicia: It's the same with love I guess.

中文对照

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Alicia: 那你说宇宙有多大?
Nash: 无限大。
Alicia: 你怎么知道?
Nash: 我知道是因为所有的资料都这样显示。
Alicia: 但是还没有被证明,对吗?
Nash: 没错。
Alicia: 你还没见过。
Nash: 没错。
Alicia: 你怎么能肯定呢?
Nash: 我不能肯定,我只是相信。
Alicia: 嗯。我猜这跟爱也一样。

好资源收藏

发表于 2017-08-16 | 分类于 Linux

I LIKE

工作–code

1
2
3
4
5
https://github.com/ksky521/nodeppt PPT制作
https://github.com/geekcompany/ResumeSample/blob/master/php.md 技术简历
https://github.com/geekcompany/DeerResume Markdown简历神器

管理

1
http://mirrors.sohu.com/

开发

1
http://www.swoole.com/ swoole

文学

1
http://mirrors.ustc.edu.cn/

未完待续

1
http://mirrors.aliyun.com/

mirrors镜像资源

发表于 2017-08-16 | 分类于 Linux

国内部分开源镜像站点汇总

网易开源镜像资源

1
http://mirrors.163.com/

搜狐开源镜像资源

1
http://mirrors.sohu.com/

清华大学开源镜像资源

1
http://mirrors.cnnic.cn

科大开源镜像资源

1
http://mirrors.ustc.edu.cn/

阿里云开源镜像资源

1
http://mirrors.aliyun.com/

angular管理后台使用文档

发表于 2016-10-31

为了提高代码可读性、重写扩展性,后台管理系统使用了ng1.x(angular1.x),因此这里写一个简单的开发文档,方便了解项目结构以及快速开发

快速开始

创建一个菜单

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
以下以创建菜单账号管理为例
添加路由规则:找到admin目录下的rount.js里添加
.state('app.user', {
abstract: true,
url: '/user',
template: '<div ui-view class="fade-in"></div>',
resolve: {
deps: ['$ocLazyLoad',
function( $ocLazyLoad ){
return $ocLazyLoad.load('admin/user/ctrl.js');
}]
}
})
.state('app.user.list', {
url: '/list?page&search',
templateUrl: 'admin/user/list.html',
ncyBreadcrumb: {
parent:'app.user',
label: '用户列表',
}
})
.state('app.user.detail', {
url: '/detail/{id}',
templateUrl: 'admin/user/detail.html',
ncyBreadcrumb: {
parent:'app.user.list',
label: '编辑',
}
})
.state('app.user.create', {
url: '/create',
templateUrl: 'admin/user/detail.html',
ncyBreadcrumb: {
parent:'app.user.list',
label: '新增',
}
})
页面显示菜单:打开admin/blocks下的aside.html
在系统管理菜单下加入以下代码
<li class="">
<a ui-sref="app.user.list">
<i class="menu-icon fa fa-caret-right"></i>
账号管理
</a>
<b class="arrow"></b>
</li>
保存刷新页面即可显示账号管理

更多: [501849606@qq.com]

查询数据列表展示

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
参照以上创建“用户管理”路由规则中的 templateUrl: 'admin/user/list.html'
在admin目录下创建user文件夹 并在user里面创建 list.html模板和ctrl.js控制器
list.html
<div class="wrapper-md" ng-controller="ListController">
html内容......
以下是循环遍历请求接口返回的数据 展示到页面 ng-repeat为遍历标签
<tr ng-repeat="data in data.userInfoList" on-finish-render-filters>
<td>{{data.login}}</td>
<td>{{data.role_name}}</td>
<td>{{data.email}}</td>
<td>{{data.qq}}</td>
<td>{{data.ctime|date:'yyyy-MM-dd HH:mm:ss'}}</td>
</tr>
</div>
ctrl.js
'use strict';
app.controller('ListController', function($scope, $http, $resource,$stateParams,$modal,$state) {
//查询 请求获取用户数据接口获取用户列表数据
$scope.query = function(page,filter){
//用post带上参数请求接口获取数据
$http.post($scope.app.host + "userManage/getUserInfoList", {usertoken: $scope.session_user.usertoken, authcode : '123456'})
.then(function(response) {
//获得数据返回
var data = response.data;
if ( data.code != 40001) {
alert(data.message);
} else {
//将返回的列表数组赋给域 提供给list.html中的ng-repeat使用
$scope.data = data.data;
}
}, function(x) {
$scope.authError = '服务器错误';
});
}
//默认执行查询接口查询数据
$scope.query($stateParams.page,$stateParams.search);
});
ctrl.js中的ListController对应list.html中的ng-controller="ListController" 表示这个区域中的事件处理

更多: [501849606@qq.com]

新增或编辑用户

添加 新增和编辑用户页面

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
在admin/user文件夹user下创建 detail.html模板
控制器域 ng-controller 数据绑定ng-model
<div ng-controller="DetailController"> //ng-controller
<form class="form-horizontal ng-pristine ng-valid ng-valid-date ng-valid-required ng-valid-parse ng-valid-date-disabled" ng-submit="submit()"> //ng-submit
<div class="col-auto">
<div class="table_full">
<table class="table table-bordered">
<tbody>
<tr>
<th width="130">用户名 </th>
<td>
<input type="text" style="width:400px;" ng-model="data.login" class="input input_hd J_title_color" placeholder="请输入用户名 " >
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="form-actions">
<button class="btn btn-primary btn_submit J_ajax_submit_btn" type="submit">提交</button>
&nbsp; &nbsp; &nbsp;
<button class="btn" type="reset">
<i class="icon-undo bigger-110"></i>
重置
</button>
</div>
</form>
</div>

crtl.js添加页面的业务逻辑

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
在admin/user文件夹中的crtl.js
app.controller('DetailController', function($rootScope,$scope, $http, $stateParams,$state) {
$scope.edit_mode = !!$stateParams.id;
//如果是编辑数据,获取初始化的编辑数据
if ($scope.edit_mode) {
$http.post($scope.app.host + "userManage/getUserInfoById", {usertoken: $scope.session_user.usertoken, authcode : '123456', id: $stateParams.id})
.then(function(response) {
var data = response.data;
if ( data.code != 40001) {
alert(data.message);
} else {
//把获取到的数据赋给域
$scope.data = data.data;
}
}, function(x) {
$scope.authError = '服务器错误';
});
} else {
//添加页面把空数据赋给域
$scope.data = {};
}
// form表单提交时的操作
$scope.submit = function(){
$scope.data.usertoken = $scope.session_user.usertoken;
$scope.data.authcode = '123456';
//如果是编辑时的提交
if($scope.edit_mode){
$scope.data.id = $stateParams.id;
$http.post($scope.app.host + "userManage/editUserInfo", $scope.data)
.then(function(response) {
var data = response.data;
if ( data.code != 40001) {
alert(data.message);
} else {
$state.go('app.user.list');
}
}, function(x) {
$scope.authError = '服务器错误';
});
} else {
//如果是新增数据的提交
$scope.data.phonenum = $scope.data.login;
$http.post($scope.app.host + "auth/regist", $scope.data)
.then(function(response) {
var data = response.data;
if ( data.code != 40001) {
alert(data.message);
} else {
$state.go('app.user.list');
}
}, function(x) {
$scope.authError = '服务器错误';
});
}
};
});

更多: [501849606@qq.com]

删除数据

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
在列表页的循环方法中有一个删除方法 delete();
<a class="red" ng-click="delete({id:data.id})" title="删除">
<i class="fa fa-trash-o bigger-130"></i>
</a>
crtl.js中的删除方法
app.controller('ListController', function($scope, $http, $resource,$stateParams,$modal,$state) {
//域中的delete方法
$scope.delete = function(did) {
//弹出删除确认 弹出层
var modalInstance = $modal.open({
templateUrl: 'admin/confirm.html',
controller: 'ConfirmController',
size:'sm',
});
modalInstance.result.then(function () {
//如果确认删除 拼装参数调用删除接口
$http.post($scope.app.host + "userManage/deleteUserInfo", {usertoken: $scope.session_user.usertoken, authcode : '123456', id: did.id})
.then(function(response) {
var data = response.data;
if (data.code != 40001) {
alert(data.message);
} else {
//删除成功后跳转到list页面
$state.go('app.user.list');
}
}, function(x) {
$scope.authError = '服务器错误';
});
});
}
});
//confirm弹层
app.controller('ConfirmController', ['$scope', '$modalInstance', function($scope, $modalInstance){
$scope.ok = function () {
$modalInstance.close();
};
$scope.cancel = function () {
$modalInstance.dismiss('cancel');
};
}]);

更多: [501849606@qq.com]

你好,世界

发表于 2016-10-28 | 分类于 随笔

你好,世界

风

起风了

和

告诉自己每天都比昨天好一点

日

因为我知道,逆水行舟,不进则退

丽

不知道未来长什么样子,但是我相信未来一定是美好的

hexo first article

123
sir051223

sir051223

28 日志
7 分类
© 2019 sir051223