从3月22号开始接手企信通短信接口到现在已经10天了。辛苦了晓晨和庆瑶了,感谢你们百忙之中抽空写C#的WebService,远程调试,也耽误你们的周末休息啦。
在这10天中,学到了很多的,但是也有很多的不懂,最终也是换了一种方式去实现它。同时也感谢客户,给予这个平台去锻炼了自己。借用张总今天群里发的一句话:“一个公司的优秀,一个人的不一般,都因为你有最严苛的客户助你最快提高!”
漫长的10天,不是每天都全部扑上去,而是每天抽个半个小时左右想想为什么?到底什么地方做错了?中间与API接口提供方交流,也向身边的一些朋友咨询关于 企信通 的API状况。最终不断试验和从一位有经验的朋友那得知:企信通在64位的server2008 系统下,兼容性有问题,因为不是学C#的,所以最终只知道在这个环境下,发布没有问题,即通过发布的平台可以发送短信,但是部署到IIS就是问题一大堆,打印出来的问题是:检索 COM 类工厂中 CLSID 为 {11FCBB79-75DC-4C17-AF52-48B0D3FE0D6F} 的组件时失败,原因是出现以下错误: 80040154。未将对象引用设置到对象的实例。明明dll注册成功,但是还是引用不到!如果有哪个高手看到这篇文章,知道答案,望回复!
在网上搜了好久都没找到解决的办法。最终解决的办法用了他们的server2003 服务器,第一遍装就成功了。由于内网,没感觉到有影响速度方面的问题。
PHP调用C# WebService的代码,也就是客户端的代码:
/** * send_sms 企信通发送短信 2014.3.31 * @param string $reciverTel 接收方的号码 * @param string $smsContent 发送的内容 * @return array 返回发送的状态以及错误信息 */ function send_sms($reciverTel,$smsContent) { if(empty($reciverTel) || empty($smsContent)){ return array( 'status' => 0, 'info' => '发送号码不能为空和发送内容不能为空!' ); } $client = new SoapClient($url);//这是server2003的服务器的地址,$url改成WebService的路径 if ($client !== false) { //解决中文乱码问题 $client->soap_defencoding = 'utf-8'; $client->decode_utf8 = false; $client->xml_encoding = 'utf-8'; // 使用关联数组,键名对应C#方法的参数名 $params = array('senderTel' => 0, 'reciverTel' => $reciverTel, 'smsContent' => $smsContent); // 可以使用 $client->__soapCall() 或 $client->WebService方法名() 两种方式调用 // 使用 $client->__soapCall() 调用时应将 $param 再包裹一层 try { $result = $client->__soapCall("sendSMSToServer", array("parameters" => $params)); if($result->sendSMSToServerResult == 1){ return array( 'status' => 1, 'info' => '发送成功!' ); }else{ return array( 'status' => 0, 'info' => '发送成功!' ); } } catch (Exception $ex) { return array( 'status' => 0, 'info' => $ex->getMessage() ); } } }
因为曾经走过,所以怕看不到,每一次记录,似乎一个坚实脚印在身后,所以值得坚持!
后排来了,还没上呢
后排来了,还没上呢