日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

ThinkPHP调用连连支付

發(fā)布時(shí)間:2024/9/30 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ThinkPHP调用连连支付 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.配置環(huán)境

ip域名申請(qǐng)

?ip域名審核

?ip域名填寫

?

?安全中心

?商戶公鑰維護(hù)

?

2.編寫代碼

*注意,一定要驗(yàn)簽

*注意,一定要驗(yàn)簽

文章中有的地方?jīng)]有驗(yàn)簽,但是自己根據(jù)需要一定要加上(安全第一)

<?php namespace Service\Controller;use Base\Webbase;/***漢字轉(zhuǎn)變?yōu)閡tf8編碼*/ function chinesetoutf8($a=null){$a = iconv("gb2312","utf-8",$a);return $a; } /** 驗(yàn)證 webhooks 簽名方法*/ function verify_signature($raw_data, $signature, $pub_key_path) {$pub_key_contents = file_get_contents($pub_key_path);// php 5.4.8 以上,第四個(gè)參數(shù)可用常量 OPENSSL_ALGO_SHA256return openssl_verify($raw_data, base64_decode($signature), $pub_key_contents, 'sha256'); }class PayController extends Webbase {public function _initialize(){parent::_initialize();Vendor('Llpay.lib.llpay_core');Vendor('Llpay.lib.llpay_md5');Vendor('Llpay.lib.llpay_rsa');Vendor('Llpay.lib.llpay_cls_json');Vendor('Llpay.lib.llpay_notify');Vendor('Llpay.lib.llpay_submit');Vendor('Llpay.lib.tixian.llpay_security');Vendor('Llpay.lib.tixian.llpay_apipost_submit');}public function dollpay($data){//商戶用戶唯一編號(hào)$user_id = $data['uid'];$bank = M('bankcard')->where(array('uid'=>$this->uid))->find();$userinfo = M('user_info')->where(array('uid'=>$this->uid))->find();//支付類型 虛擬商品:101001 實(shí)物商品:109001 賬戶充值:108001//$busi_partner = $data['busi_partner'];$busi_partner = 101001;//商戶訂單號(hào)$no_order = $data['order_id']; //商戶網(wǎng)站訂單系統(tǒng)中唯一訂單號(hào),必填//付款金額$money_order = $data['amount']/100;//商品名稱$name_goods = $data['name_goods'];//訂單描述$info_order = $data['info_order'];/**********************************************///卡號(hào)$card_no = $bank['card_number'];//姓名$acct_name = $userinfo['name'];//身份證號(hào)$id_no = $userinfo['idcard'];//協(xié)議號(hào)$no_agree = $data['no_agree'];/*************************************************///風(fēng)險(xiǎn)控制參數(shù) // $risk_item = $data['risk_item'];// $risk_item = '{\"user_info_bind_phone\":\"17358695911\",\"user_info_dt_register\":\"2013100122130\",\"risk_state\":\"1\",\"frms_ware_category\":\"1019\"}';$user = M('user')->where(array('uid'=>$user_id))->find();$userinfo = M('user_info')->where(array('uid'=>$user_id))->find();$risk_item = '{\"frms_ware_category\":\"1018\",\"user_info_mercht_userno\":\"2018109002237008\",\"user_info_bind_phone\":\"'.$user['mobile'].'\",\"user_info_dt_register\":\"'.date('YmdHis', $user['reg_time']).'\",\"user_info_full_name\":\"'.$userinfo['name'].'\",\"user_info_id_no\":\"'.$userinfo['idcard'].'\",\"user_info_identify_state\":\"1\",\"user_info_identify_type\":\"3\",}';//訂單有效期 分鐘為單位,默認(rèn)為10080分鐘(7天)$valid_order = 10080;//服務(wù)器異步通知頁面路徑$notify_url = "http://www.***.com/index.php/**/**/notifyurl";//需http://格式的完整路徑,不能加?id=123這類自定義參數(shù)//頁面跳轉(zhuǎn)同步通知頁面路徑$return_url = "http://www.***.com/index.php/**/**/returnurl";//需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),不能寫成http://localhost//************************************************************///構(gòu)造要請(qǐng)求的參數(shù)數(shù)組,無需改動(dòng)$parameter = array ("oid_partner" => C('llpay_config.oid_partner'),"app_request" => C('llpay_config.app_request'),"sign_type" => C('llpay_config.sign_type'),"valid_order" => C('llpay_config.valid_order'),"user_id" => $user_id,"busi_partner" => $busi_partner,"no_order" => $no_order,"dt_order" => local_date('YmdHis', time()),//"dt_order" =>time(),"name_goods" => $name_goods,"info_order" => $info_order,"money_order" => $money_order,"notify_url" => $notify_url,"url_return" => $return_url,"card_no" => $card_no,"acct_name" => $acct_name,"id_no" => $id_no,"no_agree" => $no_agree,"risk_item" => $risk_item,"valid_order" => $valid_order);$llpay_config = C('llpay_config');//建立請(qǐng)求$llpaySubmit = new \LLpaySubmit($llpay_config);$html_text = $llpaySubmit->buildRequestForm($parameter, "post", "確認(rèn)");echo $html_text;}/******************************服務(wù)器異步通知頁面方法其實(shí)這里就是將notify_url.php文件中的代碼復(fù)制過來進(jìn)行處理*******************************/public function notifyurl(){$llpay_config = C('llpay_config');//計(jì)算得出通知驗(yàn)證結(jié)果$llpayNotify = new \LLpayNotify($llpay_config);$llpayNotify->verifyNotify();if ($llpayNotify->result) { //驗(yàn)證成功//獲取連連支付的通知返回參數(shù),可參考技術(shù)文檔中服務(wù)器異步通知參數(shù)列表$no_order = $llpayNotify->notifyResp['no_order'];//商戶訂單號(hào)$oid_paybill = $llpayNotify->notifyResp['oid_paybill'];//連連支付單號(hào)$result_pay = $llpayNotify->notifyResp['result_pay'];//支付結(jié)果,SUCCESS:為支付成功$money_order = $llpayNotify->notifyResp['money_order'];// 支付金額if($result_pay == "SUCCESS"){//請(qǐng)?jiān)谶@里加上商戶的業(yè)務(wù)邏輯程序代(更新訂單狀態(tài)、入賬業(yè)務(wù))//——請(qǐng)根據(jù)您的業(yè)務(wù)邏輯來編寫程序——if($result_pay == "SUCCESS"){//請(qǐng)?jiān)谶@里加上商戶的業(yè)務(wù)邏輯程序代(更新訂單狀態(tài)、入賬業(yè)務(wù))//——請(qǐng)根據(jù)您的業(yè)務(wù)邏輯來編寫程序——//payAfter($llpayNotify->notifyResp);}//payAfter($llpayNotify->notifyResp);}file_put_contents("log.txt", "異步通知 驗(yàn)證成功\n", FILE_APPEND);die("{'ret_code':'0000','ret_msg':'交易成功'}"); //請(qǐng)不要修改或刪除/} else {file_put_contents("log.txt", "異步通知 驗(yàn)證失敗\n", FILE_APPEND);//驗(yàn)證失敗die("{'ret_code':'9999','ret_msg':'驗(yàn)簽失敗'}");//調(diào)試用,寫文本函數(shù)記錄程序運(yùn)行情況是否正常//logResult("這里寫入想要調(diào)試的代碼變量值,或其他運(yùn)行的結(jié)果記錄");file_put_contents("log.txt", "異步通知 驗(yàn)證失敗1\n", FILE_APPEND);}}/*頁面跳轉(zhuǎn)處理方法;這里其實(shí)就是將return_url.php這個(gè)文件中的代碼復(fù)制過來,進(jìn)行處理;*/public function returnurl(){$llpay_config = C('llpay_config');//計(jì)算得出通知驗(yàn)證結(jié)果$llpayNotify = new \LLpayNotify($llpay_config);$verify_result = $llpayNotify->verifyReturn();if($verify_result) {//驗(yàn)證成功///請(qǐng)?jiān)谶@里加上商戶的業(yè)務(wù)邏輯程序代碼//——請(qǐng)根據(jù)您的業(yè)務(wù)邏輯來編寫程序(以下代碼僅作參考)——//獲取連連支付的通知返回參數(shù),可參考技術(shù)文檔中頁面跳轉(zhuǎn)同步通知參數(shù)列表$json = new \JSON;$res_data = $_POST["res_data"];//商戶編號(hào)$oid_partner = $json->decode($res_data)-> {'oid_partner' };//商戶訂單號(hào)$no_order = $json->decode($res_data)-> {'no_order' };//支付結(jié)果$result_pay = $json->decode($res_data)-> {'result_pay' };if($result_pay == 'SUCCESS') {header("location:http://www.yixianglife.com/yxlife_new/wx_web/index.html#/my") ;//判斷該筆訂單是否在商戶網(wǎng)站中已經(jīng)做過處理//如果沒有做過處理,根據(jù)訂單號(hào)(no_order)在商戶網(wǎng)站的訂單系統(tǒng)中查到該筆訂單的詳細(xì),并執(zhí)行商戶的業(yè)務(wù)程序//如果有做過處理,不執(zhí)行商戶的業(yè)務(wù)程序}else {echo "result_pay=".$result_pay;}echo "驗(yàn)證成功<br />";//——請(qǐng)根據(jù)您的業(yè)務(wù)邏輯來編寫程序(以上代碼僅作參考)——/}else {//驗(yàn)證失敗//如要調(diào)試,請(qǐng)看llpay_notify.php頁面的verifyReturn函數(shù)echo "驗(yàn)證失敗";}header("location:http://www.**.com") ;}/*** 付款接口* @param $data*/public function payment($data){//商戶付款流水號(hào)$no_order = $data['orderid'];//商戶時(shí)間$dt_order = date("YmdHis",time());//金額$money_order = $data['amount']/100;//收款人姓名 $acct_name= $data['acct_name'];//銀行賬號(hào)$card_no = $data['card_number'];//訂單描述$info_order = $data['info'];//對(duì)私標(biāo)記$flag_card = '0';//服務(wù)器異步通知地址$notify_url = 'http://www.**.com/index.php/**/**/tx_notifyurl';//平臺(tái)來源$platform = '**.com';//版本號(hào)$api_version = '1.0';//實(shí)時(shí)付款交易接口地址$llpay_payment_url = 'https://instantpay.lianlianpay.com/paymentapi/payment.htm';//需http://格式的完整路徑,不能加?id=123這類自定義參數(shù)/************************************************************/$llpay_config = C('llpay_tx_config');//構(gòu)造要請(qǐng)求的參數(shù)數(shù)組,無需改動(dòng)$parameter = array ("oid_partner" => trim($llpay_config['oid_partner']),"sign_type" => trim($llpay_config['sign_type']),"no_order" => $no_order,"dt_order" => $dt_order,"money_order" => $money_order,"acct_name" => $acct_name,"card_no" => $card_no,"info_order" => $info_order,"flag_card" => $flag_card,"notify_url" => $notify_url,"platform" => $platform,"api_version" => $api_version);//建立請(qǐng)求$llpaySubmit = new \LLpaytxSubmit($llpay_config);//對(duì)參數(shù)排序加簽名$sortPara = $llpaySubmit->buildRequestPara($parameter);//傳json字符串$json = json_encode($sortPara);$parameterRequest = array ("oid_partner" => trim($llpay_config['oid_partner']),"pay_load" => ll_encrypt($json,$llpay_config['LIANLIAN_PUBLICK_KEY']) //請(qǐng)求參數(shù)加密);$html_text = $llpaySubmit->buildRequestJSON($parameterRequest,$llpay_payment_url); //調(diào)用付款申請(qǐng)接口,同步返回0000,是指創(chuàng)建連連支付單成功,訂單處于付款處理中狀態(tài),最終的付款狀態(tài)由異步通知告知 //出現(xiàn)1002,2005,4006,4007,4009,9999這6個(gè)返回碼時(shí)或者沒返回碼, //拋exception(或者對(duì)除了0000之后的code都查詢一遍查詢接口)調(diào)用付款結(jié)果查詢接口,明確訂單狀態(tài),不能私自設(shè)置訂單為失敗狀態(tài),以免造成這筆訂單在連連付款成功了, //而商戶設(shè)置為失敗,用戶重新發(fā)起付款請(qǐng)求,造成重復(fù)付款,商戶資金損失//對(duì)連連響應(yīng)報(bào)文內(nèi)容需要用連連公鑰驗(yàn)簽$arr = json_decode($html_text,true);return $arr; /*********************************************************************************//*if ($res['ret_code'] =="0000"){ $this->websuccess(self::OUTPUT_SUCCESS,'提現(xiàn)成功'); }else{ file_put_contents("./tx.log",json_encode($res));$this->weberror(self::THIS_ACTION_ERROR,'提現(xiàn)失敗'.$res['ret_msg']);} /*********************************************************************************/}/*** 付款結(jié)果查詢* @param $data*/public function queryPayment($data) {$data = $_POST; $url ="https://instantpay.lianlianpay.com/paymentapi/queryPayment.htm";$parameterRequest = array ('oid_partner' =>$data['oid_partner'],'sign'=>$data['sign'],'sign_type'=>$data['sign_type'],'no_order'=>$data['no_order'],'api_version'=>'1.0');$result = getHttpResponseJSON($url,$parameterRequest);//$result = json_decode($result);var_dump($result);if ($result['result_pay'] =='success'){ return true;}else{return false; }}}

?

總結(jié)

以上是生活随笔為你收集整理的ThinkPHP调用连连支付的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。