本文实例讲述了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¬ify_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 否则 flase var_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 = openssl_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相关内容感兴趣的读者可查看本站专题:《php字符串(string)用法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《php排序算法总结》、《PHP常用遍历算法与技巧总结》、《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
风云阁资源网 Design By www.bgabc.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
风云阁资源网 Design By www.bgabc.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年09月21日
2024年09月21日
- 群星《经典再现·国语女声》2CD[DTS-WAV]
- 群星《十大民歌天后》2CD[DTS-WAV分轨]
- 《黑神话:悟空》浮屠牢是最糟糕的部分:但也是做得最好的
- 《艾诺提亚:失落之歌》PC版反向跳票!9月17日PC开玩
- 老外谈《黑神话:悟空》:在我心里10分 但它确实是8分游戏
- 陈秋霞.1977-温馨在我心(LP版)【歌林】【WAV+CUE】
- 张秀卿.2019-感情骗子【豪记】【WAV+CUE】
- 林隆璇.1993-收藏昨日【福茂】【WAV+CUE】
- 魔兽世界wlk德拉诺金钻如何获得 wlk德拉诺金钻获取方法介绍
- 魔兽世界wlk祖阿曼战熊如何获得 wlk祖阿曼战熊获取方式介绍
- 魔兽世界阿奴巴拉克有什么背景故事 阿奴巴拉克背景故事介绍
- NeilYoung-EarlyDaze(2024)[24Bit]WAV
- NeaveTrio-Rooted(2024)[24Bit-WAV]
- [吉他演奏]RCAREDSEAL《Rodrigo-ConciertoDeAranjues》[WAV+CUE]
- 气质绝了!《黑神话》蜘蛛四妹演员COS自己正片释出