官方范例为java

public boolean verify(String sign , String appKey , String orderId) throws UnsupportedEncodingException{
if(sign.length()<14){
return false;
}
String verityStr = sign.substring(0,8);
sign = sign.substring(8);
String temp = MD5Util.toMD5(sign);
if(!verityStr.equals(temp.substring(0,8))){
return false;
}
String keyB = sign.substring(0,6); String randKey = keyB+appKey; randKey = MD5Util.toMD5(randKey); byte[] signB = Base64.decodeFast(sign.substring(6));
int signLength = signB.length;
String verfic="";
for(int i =0 ; i< signLength ; i++){
char b = (char)(signB[i]^randKey.getBytes()[i%32]);
verfic +=String.valueOf(b);
}
return verfic.equals(orderId);
}

Elixir

def verifyPayment(appkey, %{"tradeSign" => tradeSign} = params) do
sign_length = String.length(tradeSign)
if sign_length < 14 do
false
else
verityStr = String.slice(tradeSign, 0, 8)
sign = String.slice(tradeSign, 8, sign_length + 1)
temp = Utils.md5_sign(sign)
temp = String.slice(temp, 0, 8)
if verityStr == temp do
keyB = String.slice(sign, 0, 6)
randKey = keyB <> appkey
randKey = Utils.md5_sign(randKey)
signB = String.slice(sign, 6, sign_length + 1) |> Base.decode64! |> String.to_char_list
randKey = randKey |> String.to_char_list
signedOrderId = signB |> Enum.with_index |> Enum.map fn({c, i}) -> Bitwise.bxor c, Enum.at(randKey, rem(i, 32)) end
params["orderID"] == signedOrderId
else
false
end
end
end

最新文章

  1. scikit-learn一般实例之八:多标签分类
  2. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
  3. Javascript的shift()和push(),unshift()和pop()方法简介
  4. c语言是如何实现泛型链表
  5. SQL in与exists
  6. 日期-用Datapicker实现前一天后一天
  7. 服务 通话录音 TelephonyManager
  8. Jobs定时器 - Quartz
  9. OCP-1Z0-051-题目解析-第14题
  10. Flex布局介绍
  11. python 模块:xlrd &amp;&amp; xlwt
  12. ubuntu18.04 下利用conda安装opencv3
  13. java笔试之输出
  14. 使用C#反射机制访问类的私有成员【转】
  15. 【Unity】9.1 导入粒子系统组件
  16. POJ1426:Find The Multiple(算是bfs水题吧,投机取巧过的)
  17. 【Docker】安装并测试安装成功
  18. PHP的数据类型与常量使用
  19. shell编程中
  20. 2017 多校4 Dirt Ratio

热门文章

  1. C# 证书打印《六》
  2. 【bzoj4259】 残缺的字符串 FFT
  3. POJ 1102
  4. C语言-apache mod(模块开发)-采用VS2017开发实战(windows篇)
  5. AbstractFactory抽象工厂模式(创建型模式)
  6. 模拟登陆+数据爬取 (python+selenuim)
  7. (01)JVM-内存三大核心区域以及分析
  8. HUE配置文件hue.ini 的hdfs_clusters模块详解(图文详解)(分HA集群和非HA集群)
  9. python单元测试pytest
  10. 3-nginx.conf参数配置