PHP實(shí)現(xiàn)RSA簽名生成訂單功能【支付寶示例】
本文實(shí)例講述了PHP實(shí)現(xiàn)RSA簽名生成訂單功能。分享給大家供大家參考,具體如下:
//組合簽名 $a=time(); $b=substr($a, 1); //生成隨機(jī)訂單號 $orderid= $b.mt_rand(10000,99999); //合作身份者id,以2088開頭的16位純數(shù)字 $mygoods['partner']="2088011744308664"; //商家賬號 $mygoods['seller']="2088011744308664"; //訂單號 $mygoods['out_trade_no']=$orderid; //主題 $mygoods['subject']=$goods_name; //商品描述信息 $mygoods['body']=$goods_infro; //商品價(jià)格 $mygoods['total_fee']=$score; //服務(wù)器端異步響應(yīng)地址 $mygoods['notify_url']= "http://211.149.220.47/php/notify_url.php"; //排序 $mygoods = argSort($mygoods); //拼接 $mystr = createLinkstring($mygoods); //簽名 $sign = rsaSign($mystr); //對簽名進(jìn)行urlencode轉(zhuǎn)碼 $sign = urlencode($sign); //生成最終簽名信息 $orderInfor = $mystr."&sign=".$sign."&sign_type=RSA"; /*******特殊的 驗(yàn)簽支付寶反饋給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); //驗(yàn)簽數(shù)據(jù),驗(yàn)簽成功將返回true 否則 flase var_dump(verify($str, $sign)); /*************************需要使用到的方法*******************************/ /** * 把數(shù)組所有元素,按照“參數(shù)=參數(shù)值”的模式用“&”字符拼接成字符串 * @param $para 需要拼接的數(shù)組 * return 拼接完成以后的字符串 */ function createLinkstring($para) { $arg = ""; while (list ($key, $val) = each ($para)) { $arg.=$key."=".$val."&"; } //去掉最后一個&字符 $arg = substr($arg,0,count($arg)-2); //如果存在轉(zhuǎn)義字符,那么去掉轉(zhuǎn)義 if(get_magic_quotes_gpc()){$arg = stripslashes($arg);} return $arg; } /** * 對數(shù)組排序 * @param $para 排序前的數(shù)組 * return 排序后的數(shù)組 */ function argSort($para) { ksort($para); reset($para); return $para; } /** * RSA簽名 * @param $data 待簽名數(shù)據(jù) * @param $private_key_path 商戶私鑰文件路徑 * return 簽名結(jié)果 */ 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驗(yàn)簽 * $data待簽名數(shù)據(jù) * $sign需要驗(yàn)簽的簽名 * 驗(yàn)簽用支付寶公鑰 * return 驗(yàn)簽是否通過 bool值 */ function verify($data, $sign) { //讀取支付寶公鑰文件 $pubKey = file_get_contents('key/alipay_public_key.pem'); //轉(zhuǎn)換為openssl格式密鑰 $res = openssl_get_publickey($pubKey); //調(diào)用openssl內(nèi)置方法驗(yàn)簽,返回bool值 $result = (bool)openssl_verify($data, base64_decode($sign), $res); //釋放資源 openssl_free_key($res); //返回資源是否成功 return $result; }
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php字符串(string)用法總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《php排序算法總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP實(shí)現(xiàn)通過CURL上傳文件功能示例
這篇文章主要介紹了PHP實(shí)現(xiàn)通過CURL上傳文件功能,結(jié)合實(shí)例形式分析了php使用curl文件上傳操作相關(guān)屬性設(shè)置與使用技巧,需要的朋友可以參考下2018-05-05深入探討:PHP使用數(shù)據(jù)庫永久連接方式操作MySQL的是與非
本篇文章是對PHP使用數(shù)據(jù)庫永久連接方式操作MySQL的是與非進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06php與python實(shí)現(xiàn)的線程池多線程爬蟲功能示例
這篇文章主要介紹了php與python實(shí)現(xiàn)的線程池多線程爬蟲功能,結(jié)合實(shí)例形式分析了php與python實(shí)現(xiàn)線程池多線程爬蟲的完整實(shí)現(xiàn)方法,需要的朋友可以參考下2016-10-10php抓取并保存網(wǎng)站圖片的實(shí)現(xiàn)代碼
這篇文章主要介紹了php抓取并保存網(wǎng)站圖片的實(shí)現(xiàn)代碼,網(wǎng)頁源代碼捕獲,圖片鏈接獲取、分析、并將同樣的圖片鏈接合并功能。功能很全面,需要的朋友可以參考下2015-10-10php curl上傳、下載、https登陸實(shí)現(xiàn)代碼
這篇文章主要介紹了php curl上傳、下載、https登陸實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-07-07