本月重点测试SAAS在阿里软件平台的业务。比较麻烦,有很多接口程序需要测试。
(1)接口环境配置。
需入软件的接口地址,在阿里平台测试:测试无法显示此页。
查原因1:发现域名没有解析
域名成功解析后,还是无法显示页面。
在程序www/下加入php.php 输出phpinfo();无法输出PHP解析后信息。
查原因2:PHP程序无法解析的原因,服务器上设置问题
解决这二个问题后,可以成功跳转到阿里互联平台了,但是页面无法显示。
原因3:发现程序中缺少接口文件,除了login.php,pre.php这二个接口外,还有include/wsclient/aliWsClient.class.php这个也是接口文件。www/demo/demo/目录;
pre.php中设置的程序目录名出不对应。改正这些,终于解决了PHP程序生效的问题。
(2)接口调试准备:测试4个功能,分别为免登录测试、定价页面测试、通知URL测试和综合测试。
1、免登录测试,即在开发者社区中模拟架上应用点“使用”过程,就是测试从平台登录到ISV应用系统,ISV应用调用平台免登录接口验证用户。
2、定价页面测试,如果ISV应用有做特殊的自定义定价页面,比如除时间相关,具体应用价格还跟空间、人数相关,或提供特殊的套餐机制。在该类应用申请上架时,需要填写订购URL,测试定价页面。如果是简单的模型定价,比如:一个月月租多少元,不需要做这块测试。
3、通知URL测试,平台在订购应用成功、付款成功或退订成功,都会通知ISV。如果ISV应用想获得平台的通知信息,需要在申请上架时,填写具体通知URL。
4、综合测试,模拟集市购买,走的是真的软件购买,注意:做为ISV用户,在注册软件时,平台自动给予了使用自己应用100年的有效期,所以用ISV用户去综合测试购买软件会续订不成功,请新注册终端用户,再进行测试。终端用户注册后,因软件没上架,没有入口购买,请在浏览器里输入购买应用URL就可以购买了
(3)接口调试过程 :详细介绍一个免登陆测试的过程:这个颇为复杂,也花了不少时间才解决。
免登录,也就是阿里系统已经默认为管理员订购了该软件,填写好免登录测试的URL地址就可进行免登录测试。
接口开发与测试”页面,点击“免登录测试”按钮,如果能以ISV的身份免登陆到您的软件的测试环境,那么免登录测试就成功了。
要参考的文件:免登陆接口调用手册
免登接口validateUser是个非常重要的接口,在调用任何其它接口前,必须要调用此接口.下面我就简单介绍下validateUser接口的使用场景,使用流程及具体的调用方法.
使用场景:
验证用户身份,确保用户已经登录软件互联平台,并且是该应用的有效使用用户,一般从阿里软件互联平台跳转到ISV应用的身份验证过程中需要使用到。如用户订购了一个软件,在用户的“我的软件”中会出现如下页面:
在用户点击了“点击使用后”,ISV应用应该要调用validateUser接口来验证用户的身份。
免登流程:
从上图我们可以看到,用户免登录时主要是调用validateUser接口。
接口参数介绍:
在这里我要介绍的主要是sip_sign参数和token参数,因为ISV在调用接口过程中,容易在这两个参数上出问题。接口的其它参数在接口列表中已经有详细说明,在这就不说了。
1、token
token是身份验证令牌,可以在软件互联平台中跳转到ISV App时的URL参数中取得。token请求超时限定为10秒钟。所以如果ISV在token生成超过10秒以后才使用它,那么在调用接口时,会提示签名无效。
2、sip_sign
平台通过签名参数来防止传输过程中包被篡改,所以这个参数是很重要的。然后这个参数的生成也是比较繁琐的,很容易出错。如果ISV生成的签名参数与平台生成的签名参数不同,那么调用时同样会提示签名无效。在生成签名参数时,有几点是要非常注意的,即参与签名的参数的个数、参数值的格式及参数的排序。有关sip_sign的生成,我们在论坛中已经有好几个帖子了,有原理介绍的,也有具体生成代码的。帖子如下:
1)参数生成攻略:http://forum.alisoft.com/viewthread.php?tid=715&extra=page%3D1
2)参数生成代码:http://forum.alisoft.com/viewthread.php?tid=659&extra=page%3D1(PHP版)
以下是PHP版接口调用的范例:阿里写的不全,也是程序员自己摸索出来的
validateUser接口调用生成签名完整DEMO
注意$signStr变量的参数是升序排列,然后连接字符串形成: $sip_sign=md5(sip_appsecret+[param1+value1…paramn+valuen])
复制内容到剪贴板代码:
/**
* 阿里软件平台的REST方式认证
* [url]http://sipdev.alisoft.com/sip/rest[/url]
* ?sip_timestamp=2008-05-02+18%3A48%3A12
* &sip_appkey=10184
* &appId=10184&userId=2175944
* &sip_sign=713A26A75979CB2FCF915EE2DE41F2C7
* &appInstanceId=f2bf7b29-abee-4a3e-8678-949cf8bad9c7
* &token=0C1BC761C916D2A203D188993F29621D2D739299195A75B07CDC9A4E534C28F1FCF006F0FB8DE9E24E731D93275AFC56
* &sip_apiname=alisoft.validateUser
* &sip_sessionid=b4927f1fef8b4155b2c9b5e2dfe5ae0e
*
* sip_sign=md5(sip_appsecret+[param1+value1…paramn+valuen])
*/
private $APP_ID = 10184;
private $CERT_CODE = "注册软件时生成的CODE";
private $SIP_URL_PRE = "http://sipdev.alisoft.com/sip/rest";
public function validateUserByREST($userId, $appId, $appInstanceId, $token){
$proxy = new Snoopy();
//准备本次请求参数
echo $timestamp = date("Y-m-d H:i:s");//'2008-05-02 21:18:58';
echo $sip_sessionid = '7d052759158b46e6b920397ab47441d5';
echo $token = $token;
//生成签名
$signStr = $this->CERT_CODE.'appId'.$this->APP_ID.'appInstanceId'.$appInstanceId.
'sip_apinamealisoft.validateUser'.'sip_appkey'.$this->APP_ID.'sip_sessionid'.$sip_sessionid
.'sip_timestamp'.$timestamp.'token'.$token
.'userId'.$userId;
echo $sip_sign = strtoupper(md5($signStr));
/*
$url = $this->SIP_URL_PRE."?sip_timestamp=".date("Y-m-d H:i:s")
.'&sip_appkey='.$this->APP_ID.'&appId='.$this->APP_ID.'&sip_sign='.$sip_sign.'&token='.$token.'&appInstanceId='.$appInstanceId
.'&userId='.$userId.'&sip_apiname=alisoft.validateUser'.'&sip_sessionid='.$sip_sessionid;
*/
$formVars['sip_timestamp'] = $timestamp;
$formVars['sip_appkey'] = $this->APP_ID;
$formVars['appId'] = $this->APP_ID;
$formVars['token'] = $token;
$formVars['appInstanceId'] = $appInstanceId;
$formVars['userId'] = $userId;
$formVars['sip_apiname'] = 'alisoft.validateUser';
$formVars['sip_sessionid'] = $sip_sessionid;
$formVars['sip_sign'] = $sip_sign;
//向AEP发出服务端请求
$proxy->submit($this->SIP_URL_PRE,$formVars);
echo '<pre>';
print_r($proxy);
die();
}
}
1、特别是向阿里服务器发送身份验证请求时调用到一个类,这个类没有提供给我们,之后在网上找到了
2、数据签名的一个加密和解密过程
3、webserver接口调用方式改成rest调用方式,返回XML格式。
4、tokenISV在token生成超过10秒以后才使用它,那么在调用接口时,会提示签名无效。这个问题花了大约一天时间,数据签名正确了,但是调用时总是超过10秒,造成token失效。最后检查发现是调用服务器路由慢的问题,找到服务器管理员,疏通网络问题后,完成这个接口的测试。
目前可以在平台检测到用户合法身份,还有几个接口需要继续测试。
其中找到不下十人问问题的解决方法,查找相关资料文档,感觉很头痛,今天早上来听说问题已解决,心里的石头终于放下一块了。
哎呀,虽然艰难,感觉过程中也学到了不少东西,问题就是这样一环扣一环,总能找到解决的方法的。哈哈
另一个收获就是,这种白盒测试,真的要看得懂代码,知道程序员写的东西是什么技术,是什么意思,然后清楚数据的流向,一步步来跟踪,还要了解后台的数据结构,表与表是用到存放什么数据的,各有什么作用。。。。