设为首页 收藏本站
查看: 901|回复: 0

[经验分享] php支付宝rsa签名生成

[复制链接]

尚未签到

发表于 2017-12-29 20:22:07 | 显示全部楼层 |阅读模式
/组合签名  

$a=();  

$b=($a, 1);  

//生成随机订单号  
$orderid= $b.(10000,99999);
  
//合作身份者id,以2088开头的16位纯数字
  
$mygoods['partner']="2088011744308664";
  
//商家账号
  
$mygoods['seller']="2088011744308664";
  
//订单号
  
$mygoods['out_trade_no']=$orderid;
  
//主题
  
$mygoods['subject']=$goods_name;
  
//商品描述信息
  
$mygoods['body']=$goods_infro;
  
//商品价格
  
$mygoods['total_fee']=$score;
  
//服务器端异步响应地址
  
$mygoods['notify_url']= "http://211.149.220.47/php/notify_url.php";
  
//排序
  
$mygoods = argSort($mygoods);
  
//拼接
  
$mystr = createLinkstring($mygoods);
  
//签名
  
$sign = rsaSign($mystr);
  
//对签名进行urlencode转码
  
$sign = ($sign);
  
//生成最终签名信息
  
$orderInfor = $mystr."&sign=".$sign."&sign_type=RSA";
  
/*******特殊的 验签支付宝反馈给App的签名信息*******/
  
//支付宝反馈给App端信息拆解如下
  
$str = 'body=%E7%B2%BE%E5%93%81%E5%84%BF%E7%AB%A5%E4%B9%A6%E5%8C%85%E5%96%9C%E6%B4%8B%E6%B4%8B%E7%9A%84&notify_url=http%3A%2F%2F211.149.220.47%2Fphp%2Fnotify_url.php&out_trade_no=40609294027478&partner=2088011744308664&seller=2088011744308664&subject=%E4%B9%A6%E5%8C%85&success=true&total_fee=0.01';
  
//被拆解后的支付宝签名
  
$sign = 'Itorzqous2F7kYWWOpmoB%2FJUYgySRzh%2FOOKMhVhv%2BM48CnFk%2BQCp2cKcSsNGcDTs2AsAk%2BRYTuyMYZkGH56t8jcV2GGFkrJr%2FPxcGRlEK08QadAhImYzy9piVjoW0102lhSJYapiXGBTl5eiZ88RiyRA62D2nJEtH%2FBVXpuq63A%3D';
  //得到签名
  
$sign = ($sign);
  
//得到待签名字符串
  
$str = ($str);
  
//验签数据,验签成功将返回true 否则 flase
  
(verify($str, $sign));
  
/*************************需要使用到的方法*******************************/
  
/**
  * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
  * @param $para 需要拼接的数组
  * return 拼接完成以后的字符串
  */
  
function createLinkstring($para) {
  $arg  = "";
  while (list ($key, $val) =  ($para)) {
  $arg.=$key."=".$val."&";
  }
  //去掉最后一个&字符
  $arg = ($arg,0,($arg)-2);
  //如果存在转义字符,那么去掉转义
  if(()){$arg = ($arg);}
  return $arg;
  
}
  
/**
  * 对数组排序
  * @param $para 排序前的数组
  * return 排序后的数组
  */
  
function argSort($para) {
  ($para);
  ($para);
  return $para;
  
}
  
/**
  * RSA签名
  * @param $data 待签名数据
  * @param $private_key_path 商户私钥文件路径
  * return 签名结果
  */
  
function rsaSign($data, $private_key_path) {
  $priKey = ($private_key_path);
  $res = openssl_get_privatekey($priKey);
  openssl_sign($data, $sign, $res);
  openssl_free_key($res);
  //base64编码
  $sign = ($sign);
  return $sign;
  
}
  
/**RSA验签
  * $data待签名数据
  * $sign需要验签的签名
  * 验签用支付宝公钥
  * return 验签是否通过 bool值
  */
  
function verify($data, $sign)  {
  //读取支付宝公钥文件
  $pubKey = ('key/alipay_public_key.pem');
  //转换为openssl格式密钥
  $res = openssl_get_publickey($pubKey);
  //调用openssl内置方法验签,返回bool值
  $result = (bool)openssl_verify($data, ($sign), $res);
  //释放资源
  openssl_free_key($res);
  //返回资源是否成功
  return $result;
  
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-429485-1-1.html 上篇帖子: PHP算法面试题目 下篇帖子: PHP7中php.ini、php-fpm和www.conf的配置(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表