http 传输 加号乱码问题

15 篇文章 0 订阅
2 篇文章 0 订阅

先上代码:

public static string acceptSalesOrder(Dictionary<string, object> dicpostData)
    {
        string jsontoken =XT.Utility.EncryptObject.UnicodeToGB(JSONHelper.ToJson(dicpostData));
        string md5token = XT.Utility.EncryptObject.GetMD5(token + jsontoken);
        string jsontokenj = jsontoken.Replace("+", "%2B");
        string postData = "&token=" + md5token + "&postData=" + jsontokenj;
        string strUrl = "acceptSalesOrder.pub";
        string htmlUrl = string.Format("{0}{1}", url, strUrl);
        return Web_Request.POST_WebRequestHTML(encodingName, htmlUrl, postData);
    }

上面是一段post方式推送数据的代码。

安全验证方式是:ip白名单+token值验证

token值获取方式:顺丰接口给的一个固定值key+json数据,把这个值进行MD5加密,这样实现了token的动态变化(有利于安全)以下为jsontoken数据:

{
	"infoOrderCode": "201812211631487272",
	"orderCode": "S201901021645",
	"serviceCode": "201901021645",
	"serviceType": "维保",
	"serviceRemark": "滤芯+漏斗",
	"serviceCharge": "50",
	"serviceRebate": "10",
	"partsCharge": "990",
	"totalPrice": "1030",
	"serviceUser": "王志贤",
	"serviceUserMobile": "13617004599",
	"imageUrl": "",
	"status": "0",
	"product": [{
		"productCode": "1300245",
		"productName": "",
		"serialNum": "LS/3776691",
		"uniqueness": "20190107121906923_3776691",
		"detail": [{
			"partsCode": "1000002",
			"partsName": "净水超滤机LH3",
			"partsPrice": "990",
			"partsCount": "1"
		}]
	}]
}

客户端调用接口:

1、用一个固定token值+这段json数据 进行MD5加密,这样就能得到动态token值

2、用token值+上面的json数据就得到需要推送的数据 postData:

&token=EFE0091197FA99424D9CE3695048CC5A&postData={"infoOrderCode":"201812211631487272","orderCode":"S201901021645","serviceCode":"201901021645","serviceType":"维保","serviceRemark":"滤芯%2B漏斗","serviceCharge":"50","serviceRebate":"10","partsCharge":"990","totalPrice":"1030","serviceUser":"王志贤","serviceUserMobile":"13617004599","imageUrl":"","status":"0","product":[{"productCode":"1300245","productName":"","serialNum":"LS/3776691","uniqueness":"20190107121906923_3776691","detail":[{"partsCode":"1000002","partsName":"净水超滤机LH3","partsPrice":"990","partsCount":"1"}]}]}

服务端接收数据:

1、获取到postData数据 取出其中客户端传过来的token值

2、取出postData参数值,通过postData参数值加上给客户端的固定token值进行MD5加密 得到服务端的token值

3、跟客户端传过来的token值匹配(以此来验证身份)

这其中就有一个问题:如上图 我在serviceRemark中传输了一个“+” ,两边分别解析能匹配上,但是通过http传输协议传输就会使“+”变成空格,这样就导致两边生成token值不一样,造成token值不匹配的情况。

解决方法:客户端生成token时不用直接对原数据进行MD5加密,但是传输postData给服务端(即接口端)把“+” 用 "%2B" 代替。这样传过去客户端和接口端MD5的postData数据对象就能保持一致,于是就解决了token不匹配(即http 传输“+” 乱码的)的问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值