SmsSendConn.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <?php
  2. namespace app\common\library\monsms;
  3. /**
  4. * Created by PhpStorm.
  5. * Date: 2017-9-5
  6. * Time: 8:45
  7. * @功能概要:发送管理类
  8. * @公司名称: ShenZhen Montnets Technology CO.,LTD.
  9. */
  10. class SmsSendConn
  11. {
  12. /**
  13. * API请求地址
  14. */
  15. private $BaseUrl;
  16. public $ERROR_310099=-310099;//http请求失败错误码
  17. public function __construct($BaseUrl)
  18. {
  19. if (!empty($BaseUrl)) {
  20. $this->BaseUrl = $BaseUrl;
  21. } else {
  22. throw new Exception("API请求地址错误");
  23. }
  24. }
  25. /**
  26. * 密码加密
  27. * $userid:用户账号
  28. * $pwd:用户密码
  29. */
  30. public function encrypt_pwd($userid, $pwd)
  31. {
  32. try {
  33. $char = '00000000';//固定字符串
  34. $time = date('mdHis', time());//时间戳
  35. $pwd = md5($userid . $char . $pwd . $time);//拼接字符串进行加密
  36. return array('pwd' => $pwd, 'time' => $time);
  37. } catch (Exception $e) {
  38. print_r($e->getMessage()); //输出捕获的异常消息
  39. }
  40. }
  41. /**
  42. * 短信内容加密
  43. * $content:短信内容
  44. */
  45. public function encrypt_content($content)
  46. {
  47. try {
  48. return urlencode(iconv('UTF-8', 'GBK', $content));//短信内容转化为GBK格式再进行urlencode格式加密
  49. }catch (Exception $e) {
  50. print_r($e->getMessage()); //输出捕获的异常消息
  51. }
  52. }
  53. /**
  54. * 短连接请求方法
  55. * $url:请求地址
  56. * $post_data:请求数据
  57. */
  58. private function connection($url,$post_data)
  59. {
  60. try {
  61. $attributes = array('Accept:text/plain;charset=utf-8', 'Content-Type:application/json', 'charset=utf-8', 'Expect:', 'Connection: Close');//请求属性
  62. $ch = curl_init();//初始化一个会话
  63. /* 设置验证方式 */
  64. curl_setopt($ch, CURLOPT_HTTPHEADER, $attributes);//设置访问
  65. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//设置返回结果为流
  66. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);//设置请求超时时间
  67. curl_setopt($ch, CURLOPT_TIMEOUT, 60);//设置响应超时时间
  68. /* 设置通信方式 */
  69. curl_setopt($ch, CURLOPT_POST, 1);
  70. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  71. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  72. curl_setopt($ch, CURLOPT_URL, $url);
  73. curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);//使用urlencode格式请求
  74. $result = curl_exec($ch);//获取返回结果集
  75. $result=preg_replace('/\"msgid":(\d{1,})./', '"msgid":"\\1",', $result);//正则表达式匹配所有msgid转化为字符串
  76. $result = json_decode($result, true);//将返回结果集json格式解析转化为数组格式
  77. if (curl_errno($ch) !== 0) //网络问题请求失败
  78. {
  79. $result['result'] = $this->ERROR_310099;
  80. curl_close($ch);//关闭请求会话
  81. return $result;
  82. } else {
  83. $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  84. if ($statusCode != 200||!isset($result['result']))//域名问题请求失败或不存在返回结果
  85. {
  86. $result='';//清空result集合
  87. $result['result'] = $this->ERROR_310099;
  88. }
  89. curl_close($ch);//关闭请求会话
  90. return $result;
  91. }
  92. } catch (Exception $e) {
  93. print_r($e->getMessage());//输出捕获的异常消息
  94. $result['result'] = $this->ERROR_310099;//返回http请求错误代码
  95. return $result;
  96. }
  97. }
  98. /*
  99. * 单条发送
  100. * $data:请求数据集合
  101. */
  102. public function singleSend($data)
  103. {
  104. try {
  105. $data['userid'] = strtoupper($data['userid']);//用户名转化为大写
  106. $encrypt=$this->encrypt_pwd($data['userid'],$data['pwd']);//密码进行MD5加密
  107. $data['pwd']=$encrypt['pwd'];//获取MD5加密后的密码
  108. $data['timestamp']=$encrypt['time'];//获取加密时间戳
  109. $data['content'] = $this->encrypt_content($data['content']);//短信内容进行urlencode加密
  110. $post_data = json_encode($data);//将数组转化为JSON格式
  111. $result = $this->connection($this->BaseUrl.'single_send',$post_data);//根据请求类型进行请求
  112. return $result;//返回请求结果
  113. }catch (Exception $e) {
  114. print_r($e->getMessage()); //输出捕获的异常消息
  115. }
  116. }
  117. /*
  118. * 相同内容群发
  119. * $data:请求数据集合
  120. */
  121. public function batchSend($data,&$outdata)
  122. {
  123. try{
  124. $data['userid']=strtoupper($data['userid']);//用户名转化为大写
  125. $encrypt=$this->encrypt_pwd($data['userid'],$data['pwd']);//密码进行MD5加密
  126. $data['pwd']=$encrypt['pwd'];//获取MD5加密后的密码
  127. $data['timestamp']=$encrypt['time'];//获取加密时间戳
  128. $data['content']=$this->encrypt_content($data['content']);//短信内容进行urlencode加密
  129. $outdata = $data;
  130. $post_data=json_encode($data);//将数组转化为JSON格式
  131. $result = $this->connection($this->BaseUrl.'batch_send',$post_data);//根据请求类型进行请求
  132. return $result;
  133. }catch (Exception $e) {
  134. print_r($e->getMessage()); //输出捕获的异常消息
  135. }
  136. }
  137. /*
  138. * 个性化内容群发
  139. * $data:请求数据集合
  140. */
  141. public function multiSend($data)
  142. {
  143. try{
  144. $data['userid']=strtoupper($data['userid']);//用户名转化为大写
  145. $encrypt=$this->encrypt_pwd($data['userid'],$data['pwd']);//密码进行MD5加密
  146. $data['pwd']=$encrypt['pwd'];//获取MD5加密后的密码
  147. $data['timestamp']=$encrypt['time'];//获取加密时间戳
  148. foreach($data['multimt'] as $k=>$v)
  149. {
  150. $data['multimt'][$k]['content'] = $this->encrypt_content($v['content']);//每一条个性化的短信内容进行urlencode加密
  151. }
  152. $post_data=json_encode($data);//将数组转化为JSON格式
  153. $result=$this->connection($this->BaseUrl.'multi_send',$post_data);//根据请求类型进行请求
  154. return $result;
  155. }catch (Exception $e) {
  156. print_r($e->getMessage()); //输出捕获的异常消息
  157. }
  158. }
  159. /*
  160. * 查询余额
  161. * $data:请求数据集合
  162. */
  163. public function getBalance($data)
  164. {
  165. try{
  166. $data['userid']=strtoupper($data['userid']);//用户名转化为大写
  167. $encrypt=$this->encrypt_pwd($data['userid'],$data['pwd']);//密码进行MD5加密
  168. $data['pwd']=$encrypt['pwd'];//获取MD5加密后的密码
  169. $data['timestamp']=$encrypt['time'];//获取加密时间戳
  170. $post_data=json_encode($data);//将数组转化为JSON格式
  171. $result=$this->connection($this->BaseUrl.'get_balance',$post_data);//根据请求类型进行请求
  172. return $result;
  173. }catch (Exception $e) {
  174. print_r($e->getMessage()); //输出捕获的异常消息
  175. }
  176. }
  177. /*
  178. * 请求获取上行
  179. * $requestPath:请求地址
  180. * $data:请求数据集合
  181. * $isEncryptPwd:是否加密
  182. */
  183. public function getMo($data)
  184. {
  185. try{
  186. $data['userid']=strtoupper($data['userid']);//用户名转化为大写
  187. $encrypt=$this->encrypt_pwd($data['userid'],$data['pwd']);//密码进行MD5加密
  188. $data['pwd']=$encrypt['pwd'];//获取MD5加密后的密码
  189. $data['timestamp']=$encrypt['time'];//获取加密时间戳
  190. $post_data = json_encode($data);//将数组转化为JSON格式
  191. $result=$this->connection($this->BaseUrl.'get_mo',$post_data);//根据请求类型进行请求
  192. return $result;//返回请求结果
  193. }catch (Exception $e) {
  194. print_r($e->getMessage()); //输出捕获的异常消息
  195. }
  196. }
  197. /*
  198. * 请求获取状态报告
  199. * $requestPath:请求地址
  200. * $data:请求数据集合
  201. * $isEncryptPwd:是否加密
  202. */
  203. public function getRpt($data)
  204. {
  205. try{
  206. $data['userid']=strtoupper($data['userid']);//用户名转化为大写
  207. $encrypt=$this->encrypt_pwd($data['userid'],$data['pwd']);//密码进行MD5加密
  208. $data['pwd']=$encrypt['pwd'];//获取MD5加密后的密码
  209. $data['timestamp']=$encrypt['time'];//获取加密时间戳
  210. $post_data = json_encode($data);//将数组转化为JSON格式
  211. $result=$this->connection($this->BaseUrl.'get_rpt',$post_data);//根据请求类型进行请求
  212. return $result;
  213. }catch (Exception $e) {
  214. print_r($e->getMessage()); //输出捕获的异常消息
  215. }
  216. }
  217. }
  218. ?>