• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP实现以支付宝为例的RSA签名生成订单功能

php 搞代码 3年前 (2022-01-22) 24次浏览 已收录 0个评论

这篇文章主要介绍了PHP实现RSA签名生成订单功能,涉及php随机字符串及编码相关操作技巧,以及支付宝公钥文件读取与使用方法,需要的朋友可以参考下

本文实例讲述了PHP实现RSA签名生成订单功能。分享给大家供大家参考,具体如下:

//组合签名$a=time();$b=substr($a, 1);//生成随机订单号$orderid= $b.mt_rand(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 = urlencode($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 = urldecode($sign);//得到待签名字符串$str = urldecode($str);//验签数据,验签成功将返回true 否则 flasevar_dump(verify($str, $sign));/*************************需要使用到的方法*******************************//** * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 * @param $para 需要拼接的数组 * return 拼接完成以后的字符串 */function createLinkstring($para) {  $arg = "";  while (list ($key, $val) = each ($para)) {    $arg.=$key."=".$val."&";  }  //去掉最后一个&字符  $arg = substr($arg,0,count($arg)-2);  //如果存在转义字符,那么去掉转义  if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}  return $arg;}/** * 对数组排序 * @param $para 排序前的数组 * return 排序后的数组 */function argSort($para) {  ksort($para);  reset($para);  return $para;}/** * RSA签名 * @param $data 待签名数据 * @param $private_key_path 商户私钥文件路径 * return 签名结果 */function rsaSign($data, $private_key_path) {  $priKey = file_get_contents($private_key_path);  $res = open<p>5本文来源gao!daima.com搞$代!码#网#</p><pre>搞代gaodaima码

ssl_get_privatekey($priKey); openssl_sign($data, $sign, $res); openssl_free_key($res); //base64编码 $sign = base64_encode($sign); return $sign;}/**RSA验签 * $data待签名数据 * $sign需要验签的签名 * 验签用支付宝公钥 * return 验签是否通过 bool值 */function verify($data, $sign) { //读取支付宝公钥文件 $pubKey = file_get_contents('key/alipay_public_key.pem'); //转换为openssl格式密钥 $res = openssl_get_publickey($pubKey); //调用openssl内置方法验签,返回bool值 $result = (bool)openssl_verify($data, base64_decode($sign), $res); //释放资源 openssl_free_key($res); //返回资源是否成功 return $result;}

以上就是PHP实现以支付宝为例的RSA签名生成订单功能的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP实现以支付宝为例的RSA签名生成订单功能
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址