PHP網(wǎng)站在線銀聯(lián)支付實(shí)現(xiàn)大額付款案例

最近的一個(gè)網(wǎng)站項(xiàng)目,需要實(shí)現(xiàn)20萬(wàn)已上在線付款蹦狂,支付寶和微信都限額痊乾,于是只好想辦法搞大額支付了,演示你可以參考下這個(gè):http://www.erdangjiade.com/php/2751.html

1撩荣、先去申請(qǐng)https://www.95516.com2铣揉、支付參數(shù),提交到銀聯(lián)對(duì)應(yīng)接口的所有參數(shù) ? ? ? ? 支付 ? ?

跳轉(zhuǎn)中...

? ? %s? ? ? ? ? ? document.onreadystatechange =function(){if(document.readyState =="complete") {? ? ? ? ? ? ? ? document.pay_form.submit();? ? ? ? ? ? }? ? ? ? };? ? HTML;/**? ? ? * 構(gòu)建自動(dòng)提交HTML表單? ? ? *@returnstring? ? ? */publicfunctioncreatePostForm(){$this->params['signature'] =$this->sign();? ? ? ? $input ='';foreach($this->paramsas$key => $item) {? ? ? ? ? ? $input .="\t\t\n";? ? ? ? }returnsprintf($this->formTemplate,$this->config['frontUrl'], $input);? ? }/**? ? ? * 驗(yàn)證簽名? ? ? * 驗(yàn)簽規(guī)則:? ? ? * 除signature域之外的所有項(xiàng)目都必須參加驗(yàn)簽? ? ? * 根據(jù)key值按照字典排序餐曹,然后用&拼接key=value形式待驗(yàn)簽字符串逛拱;? ? ? * 然后對(duì)待驗(yàn)簽字符串使用sha1算法做摘要;? ? ? * 用銀聯(lián)公鑰對(duì)摘要和簽名信息做驗(yàn)簽操作? ? ? *? ? ? *@throws\Exception? ? ? *@returnbool? ? ? */publicfunctionverifySign(){? ? ? ? $publicKey =$this->getVerifyPublicKey();? ? ? ? $verifyArr =$this->filterBeforSign();? ? ? ? ksort($verifyArr);? ? ? ? $verifyStr =$this->arrayToString($verifyArr);? ? ? ? $verifySha1 = sha1($verifyStr);? ? ? ? $signature = base64_decode($this->params['signature']);? ? ? ? $result = openssl_verify($verifySha1, $signature, $publicKey);if($result ===-1) {thrownew\Exception('Verify Error:'.openssl_error_string());? ? ? ? }return$result ===1?true:false;? ? }/**? ? ? * 取簽名證書ID(SN)? ? ? *@returnstring? ? ? */publicfunctiongetSignCertId(){return$this->getCertIdPfx($this->config['signCertPath']);? ? }/**? ? ? * 簽名數(shù)據(jù)? ? ? * 簽名規(guī)則:? ? ? * 除signature域之外的所有項(xiàng)目都必須參加簽名? ? ? * 根據(jù)key值按照字典排序台猴,然后用&拼接key=value形式待簽名字符串朽合;? ? ? * 然后對(duì)待簽名字符串使用sha1算法做摘要;? ? ? * 用銀聯(lián)頒發(fā)的私鑰對(duì)摘要做RSA簽名操作? ? ? * 簽名結(jié)果用base64編碼后放在signature域? ? ? *? ? ? *@throws\InvalidArgumentException? ? ? *@returnmultitype|string? ? ? */privatefunctionsign(){? ? ? ? $signData =$this->filterBeforSign();? ? ? ? ksort($signData);? ? ? ? $signQueryString =$this->arrayToString($signData);if($this->params['signMethod'] ==01) {//簽名之前先用sha1處理//echo $signQueryString;exit;$datasha1 = sha1($signQueryString);? ? ? ? ? ? $signed =$this->rsaSign($datasha1);? ? ? ? }else{thrownew\InvalidArgumentException('Nonsupport Sign Method');? ? ? ? }return$signed;? ? ? ? ? ? ? }/**? ? ? * 數(shù)組轉(zhuǎn)換成字符串? ? ? *@paramarray $arr? ? ? *@returnstring? ? ? */privatefunctionarrayToString($arr){? ? ? ? $str ='';foreach($arras$key => $value) {? ? ? ? ? ? $str .= $key.'='.$value.'&';? ? ? ? }returnsubstr($str,0, strlen($str) -1);? ? }/**? ? ? * 過(guò)濾待簽名數(shù)據(jù)? ? ? * signature域不參加簽名? ? ? *? ? ? *@returnarray? ? ? */privatefunctionfilterBeforSign(){? ? ? ? $tmp =$this->params;unset($tmp['signature']);return$tmp;? ? }/**? ? ? * RSA簽名數(shù)據(jù)饱狂,并base64編碼? ? ? *@paramstring $data 待簽名數(shù)據(jù)? ? ? *@returnmixed? ? ? */privatefunctionrsaSign($data){? ? ? ? $privatekey =$this->getSignPrivateKey();? ? ? ? $result = openssl_sign($data, $signature, $privatekey);if($result) {returnbase64_encode($signature);? ? ? ? }returnfalse;? ? }/**? ? ? * 取.pfx格式證書ID(SN)? ? ? *@returnstring? ? ? */privatefunctiongetCertIdPfx($path){? ? ? ? $pkcs12certdata = file_get_contents($path);? ? ? ? openssl_pkcs12_read($pkcs12certdata, $certs,$this->config['signCertPwd']);? ? ? ? $x509data = $certs['cert'];? ? ? ? openssl_x509_read($x509data);? ? ? ? $certdata = openssl_x509_parse($x509data);return$certdata['serialNumber'];? ? }/**? ? ? * 取.cer格式證書ID(SN)? ? ? *@returnstring? ? ? */privatefunctiongetCertIdCer($path){? ? ? ? $x509data = file_get_contents($path);? ? ? ? openssl_x509_read($x509data);? ? ? ? $certdata = openssl_x509_parse($x509data);return$certdata['serialNumber'];? ? }/**? ? ? * 取簽名證書私鑰? ? ? *@returnresource? ? ? */privatefunctiongetSignPrivateKey(){? ? ? ? $pkcs12 = file_get_contents($this->config['signCertPath']);? ? ? ? openssl_pkcs12_read($pkcs12, $certs,$this->config['signCertPwd']);return$certs['pkey'];? ? }/**? ? ? * 取驗(yàn)證簽名證書? ? ? *@throws\InvalidArgumentException? ? ? *@returnstring? ? ? */privatefunctiongetVerifyPublicKey(){//先判斷配置的驗(yàn)簽證書是否銀聯(lián)返回指定的證書是否一致if($this->getCertIdCer($this->config['verifyCertPath']) !=$this->params['certId']) {thrownew\InvalidArgumentException('Verify sign cert is incorrect');? ? ? ? }returnfile_get_contents($this->config['verifyCertPath']);? ? ? ? ? ? } } [2].[代碼] 配置示例 跳至 [1] [2] [3] [4]配制事例//銀聯(lián)支付設(shè)置'unionpay'=> [//測(cè)試環(huán)境參數(shù)'frontUrl'=>'https://101.231.204.80:5000/gateway/api/frontTransReq.do',//前臺(tái)交易請(qǐng)求地址//'singleQueryUrl' => 'https://101.231.204.80:5000/gateway/api/queryTrans.do', //單筆查詢請(qǐng)求地址'signCertPath'=>__DIR__.'/../keys/unionpay/test/sign/700000000000001_acp.pfx',//簽名證書路徑'signCertPwd'=>'000000',//簽名證書密碼'verifyCertPath'=>__DIR__.'/../keys/unionpay/test/verify/verify_sign_acp.cer',//驗(yàn)簽證書路徑'merId'=>'xxxxxxx',//正式環(huán)境參數(shù)//'frontUrl' => 'https://101.231.204.80:5000/gateway/api/frontTransReq.do', //前臺(tái)交易請(qǐng)求地址//'singleQueryUrl' => 'https://101.231.204.80:5000/gateway/api/queryTrans.do', //單筆查詢請(qǐng)求地址//'signCertPath' => __DIR__.'/../keys/unionpay/test/sign/PM_700000000000001_acp.pfx', //簽名證書路徑//'signCertPwd' => '000000', //簽名證書密碼//'verifyCertPath' => __DIR__.'/../keys/unionpay/test/verify/verify_sign_acp.cer', //驗(yàn)簽證書路徑//'merId' => 'xxxxxxxxx', //商戶代碼],支付事例$unionPay =newUnionPay(); $unionPay->config = Yii::$app->params['unionpay'];//上面的配置$unionPay->params = ['version'=>'5.0.0',//版本號(hào)'encoding'=>'UTF-8',//編碼方式'certId'=> $unionPay->getSignCertId(),//證書ID'signature'=>'',//簽名'signMethod'=>'01',//簽名方式'txnType'=>'01',//交易類型'txnSubType'=>'01',//交易子類'bizType'=>'000201',//產(chǎn)品類型'channelType'=>'08',//渠道類型'frontUrl'=> Url::toRoute(['payment/unionpayreturn'],true),//前臺(tái)通知地址'backUrl'=> Url::toRoute(['payment/unionpaynotify'],true),//后臺(tái)通知地址//'frontFailUrl' => Url::toRoute(['payment/unionpayfail'], true), //失敗交易前臺(tái)跳轉(zhuǎn)地址'accessType'=>'0',//接入類型'merId'=> Yii::$app->params['unionpay']['merId'],//商戶代碼'orderId'=> $orderNo,//商戶訂單號(hào)'txnTime'=> date('YmdHis'),//訂單發(fā)送時(shí)間'txnAmt'=> $sum *100,//交易金額曹步,單位分'currencyCode'=>'156',//交易幣種];? ? ? ? ? $html = $unionPay->createPostForm();異步通知示例$unionPay =newUnionPay(); $unionPay->config = Yii::$app->params['unionpay'];? ? ? ? ? $unionPay->params = Yii::$app->request->post();//銀聯(lián)提交的參數(shù)if(empty($unionPay->params)) {return'fail!'; }if($unionPay->verifySign() && $unionPay->params['respCode'] =='00') {//.......}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市休讳,隨后出現(xiàn)的幾起案子讲婚,更是在濱河造成了極大的恐慌,老刑警劉巖俊柔,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筹麸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡雏婶,警方通過(guò)查閱死者的電腦和手機(jī)物赶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)留晚,“玉大人酵紫,你說(shuō)我怎么就攤上這事。” “怎么了奖地?”我有些...
    開(kāi)封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵状蜗,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我鹉动,道長(zhǎng)轧坎,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任泽示,我火速辦了婚禮缸血,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘械筛。我一直安慰自己捎泻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布埋哟。 她就那樣靜靜地躺著笆豁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赤赊。 梳的紋絲不亂的頭發(fā)上闯狱,一...
    開(kāi)封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音抛计,去河邊找鬼哄孤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛吹截,可吹牛的內(nèi)容都是我干的瘦陈。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼波俄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼晨逝!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起懦铺,我...
    開(kāi)封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤捉貌,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后阀趴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體昏翰,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡苍匆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年刘急,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浸踩。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叔汁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情据块,我是刑警寧澤码邻,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站另假,受9級(jí)特大地震影響像屋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜边篮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一己莺、第九天 我趴在偏房一處隱蔽的房頂上張望佃蚜。 院中可真熱鬧毕谴,春花似錦剂碴、人聲如沸睹耐。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)掌桩。三九已至沮明,卻和暖如春色乾,著一層夾襖步出監(jiān)牢的瞬間誊册,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工解虱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人漆撞。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像浮驳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子至会,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,799評(píng)論 25 707
  • 銀聯(lián)支付术陶,支付寶支付煤痕,微信支付的三大總結(jié)梧宫,之前也有寫過(guò)兩篇。 微信支付塘匣,支付寶支付脓豪,銀聯(lián)支付——三大支付總結(jié): h...
    LucasAdam閱讀 4,916評(píng)論 2 23
  • 1. 一個(gè)類轉(zhuǎn)換異常 2. 問(wèn)題一的本質(zhì)是否跟范型的繼承問(wèn)題一樣扫夜? 3. Java的多態(tài)是如何實(shí)現(xiàn)?
    scvthedefect閱讀 195評(píng)論 0 0
  • 1驰徊、銷售輸血法 首先不得不提的是華夏幸福的“銷售輸血法”历谍,那就是眾所周知的住宅銷售,這也是多年來(lái)華夏幸福業(yè)績(jī)支撐和...
    許文輝閱讀 808評(píng)論 0 8
  • 病了辣垒,頭痛欲裂望侈。貌似頸椎痛壓迫了神經(jīng),導(dǎo)致太陽(yáng)穴和整個(gè)后腦勺都疼的要死勋桶,這就是熬夜的后果脱衙,也是沒(méi)有拖延一件事的結(jié)果...
    貓不吃魚(yú)小刺閱讀 307評(píng)論 0 0