PHP 调用C# WebService(企信通开发)

从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()
    );
   }
 }
}

因为曾经走过,所以怕看不到,每一次记录,似乎一个坚实脚印在身后,所以值得坚持!

PHP 调用C# WebService(企信通开发)》有2个想法

发表评论

邮箱地址不会被公开。