restfull加签_kbmmw 做REST 服务签名认证的一种方式

function TForm1.SendSMS(constAppKey, AppSecret, ReceiveNumber, FreeSignName,

TemplateCode, TemplateContent:string; var ResultMsg: string): Boolean;function specialUrlEncode(const sStr:string):string;begin

//URLEncode后再增加三种字符替换:加号(+)替换成 %20、星号(*)替换成 %2A、%7E 替换回波浪号(~)

Result :=TNetEncoding.URL.EncodeForm(sStr);

Result.Replace('+','%20').Replace('*','%2A').Replace('%7E','~');end;function MakeSign(const AParams: TStringList; const AppSecret: string;var sortQueryStringTmp :String): string;varI: Integer;

sortedQueryString :string;

stringToSign:string;

sSign :string;

outs: TStringList;

pn,pv:string;

skey:Tbytes;beginouts:=AParams;

outs.UseLocale:=True;

outs.Sort;//SortString( AParams,outs);

//参数拼接

sortQueryStringTmp := '';for I := 0 to outs.Count - 1 do

beginpn:=specialUrlEncode(outs.Names[I]);

pv:=specialUrlEncode(outs.Values[outs.Names[I]]);

sortQueryStringTmp := sortQueryStringTmp +pn + '='+ pv+'&';end;

setlength(sortQueryStringTmp,length(sortQueryStringTmp)-1);

sortedQueryString:=sortQueryStringTmp;

stringToSign :='GET&%2F&' +specialUrlEncode(sortedQueryString);

skey:=THashSHA1.GetHMACAsBytes(Tencoding.UTF8.GetBytes(stringToSign), Tencoding.UTF8.GetBytes(AppSecret+'&'));

sSign := TBase64Encoding.Create.EncodeBytesToString(skey);

Result :=specialUrlEncode(sSign);end;varHTTP: TNetHTTPClient;

JO: TJSONObject;

Params: TStringList;

Response:string;

code:TGUID;

sortQueryStringTmp :string;

signature :string;

sURL :string;

ResponseStr: TStringStream;beginResult :=False;

CreateGUID(code);

HTTP := TNetHTTPClient.Create(nil);

Params := TStringList.Create();

ResponseStr :=TStringStream.Create('', TEncoding.ASCII);//中文用UTF8

try

//;//

//请求参数中不允许出现以Signature为key的参数。参考代码如下```//String accessKeyId = “testId”;String accessSecret = “testSecret”;//java.text.SimpleDateFormat df = new java.text.SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss’Z’”);//df.setTimeZone(new java.util.SimpleTimeZone(0, “GMT”));// 这里一定要设置GMT时区//

//java.util.Map paras = new java.util.HashMap(); 1. 系统参数//paras.put(“SignatureMethod”, “HMAC-SHA1”);//paras.put(“SignatureNonce”, java.util.UUID.randomUUID().toString());//paras.put(“AccessKeyId”, accessKeyId);//paras.put(“SignatureVersion”, “1.0”);//paras.put(“Timestamp”, df.format(new java.util.Date()));//paras.put(“Format”, “XML”);//

2. 业务API参数//paras.put(“Action”, “SendSms”);//paras.put(“Version”, “2017-05-25”);//paras.put(“RegionId”, “cn-hangzhou”);//paras.put(“PhoneNumbers”, “15300000001”);//paras.put(“SignName”, “阿里云短信测试专用”);//paras.put(“TemplateParam”, “{\”customer\”:\”test\”}”);//paras.put(“TemplateCode”, “SMS_71390007”);//paras.put(“OutId”, “123”);

Params.Values['P2'] := 'HMAC-SHA1';

Params.Values['P3'] :=GUIDToString(code);

Params.Values['AccessKeyId'] :=AppKey;

Params.Values['P1'] := '1.0';//Params.Values['Timestamp'] := FormatDateTime('yyyy-mm-dd hh:mm:ss', now - 1/3);

Params.Values['Timestamp'] := FormatDateTime('yyyy-MM-dd''T''HH:mm:ss''Z''', now-1/3);//Params.Values['Format'] := 'JSON';

Params.Values['Action'] := 'SendSms';//Params.Values['Version'] := '2017-05-25';

//Params.Values['RegionId'] := 'cn-hangzhou';

//Params.Values['PhoneNumbers'] := ReceiveNumber;

//Params.Values['SignName'] := FreeSignName;

//Params.Values['TemplateParam'] := TemplateContent;

//Params.Values['TemplateCode'] := TemplateCode;

signature:=MakeSign(Params,AppSecret,sortQueryStringTmp);

sURL := 'http://127.0.0.1/xalionrest/getwithcheck?signature='+signature+'&'+sortQueryStringTmp;

Memo1.Lines.Text :=sURL;tryresultmsg:=http.Get(sURL).ContentAsString ;

Memo2.Lines.add( resultmsg);excepton E: Exceptiondo

beginResultMsg :=E.Message;

Exit;end;end;finallyHTTP.Free;

Params.Free;

ResponseStr.Free;end;end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值