微信支付签名和加密算法 php

签名

private function sign($map , $key,  $type ='MD5') 
{
  if (!empty($map)) {
    ksort($map);
    $url = $this->createLinkstring($map);

    $url = $url . '&key='.$key;
    if ($type === 'MD5') {
      $url = strtoupper(md5($url));
    } else {
      $url = hash_hmac('sha256',$url,$key);
    }
  } else {
      throw new RuntimeException('签名数据异常!!');
  }
  //签名步骤四:所有字符转为大写
  
  return  strtoupper($url);
}
public function createLinkstring($para) 
{
  // ksort($para);
  $arg  = "";
  while (list ($key, $val) = $this->fun_adm_each($para)) {
      $arg.=$key."=".$val."&";
  }
  //去掉最后一个&字符
  $arg = substr($arg,0,strlen($arg)-1);
  
  //如果存在转义字符,那么去掉转义
  if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
  
  return $arg;
}

有一个点:之前的统一下单接口的加密方式是MD5,这次代码忽然就用不了,之后我改成了sha256成功了,然后我看了一下官方文档也没看出什么问题,我同事也是同样的问题,他的代码是他自己的,但是也是换成sha256签名就过了
在这里插入图片描述

你可能感兴趣的:(php,微信开发,php)