php支付程序
❶ php怎麼做銀聯的支付介面調用
PHP做銀聯支付介面調用問題
//在工商支付介面之前要找到工行提供的介面文件級dll文件
//將訂單簽名數據公鑰加密提供給工行指定頁面
//組織要簽名的數據串
$src="ICBC_PERBANK_B2C1.0.0.0".$infomer["merid"].$infomer["meracct"].$returnaddress."HS".$ddnumber.$amount."0010".$nowtime."0";
$com=new com('ICBCEBANKUTIL.B2CUtil');
$rc=$com->init("c:\WINDOWS\user.crt","c:\WINDOWS\user.crt","c:\WINDOWS\user.key","11111111");
$ssrc=$com->signC($src, strlen($src)); //訂單簽名數據
$rc=$com->verifySignC($src,strlen($src), $ssrc, strlen($ssrc));
$cert=$com->getCert(1); //商城證書公鑰
//將商戶證書存儲到c:\WINDOWS目錄下,然後創建form表單,將指定的數據提交到工行指定的網頁中
<!--支付寶支付的介面操作,提交的數據-->
<td width="100"><a href="<{$link}>"><img src="images/sy_19.gif" width="90" height="25" border="0"></a></td>
<!--——————————————————-->
<!--工行支付的介面操作,提交的數據-->
<form action="https://mybank.icbc.com.cn/" method="post" name="form_bank">
<input name="interfaceName" type="hidden" value="ICBC_PERBANK_B2C"/>
<input name="interfaceVersion" type="hidden" value="1.0.0.0"/>
<input name="orderid" type="hidden" value="<{$ddnumber}>"/>
<input name="amount" type="hidden" value="<{$amount}>"/>
<input name="curType" type="hidden" value="001"/>
<input name="merID" type="hidden" value="<{$merid}>"/>
<input name="merAcct" type="hidden" value="<{$meracct}>"/>
<input name="verifyJoinFlag" type="hidden" value="0"/>
<input name="notifyType" type="hidden" value="HS"/>
<input name="merURL" type="hidden" value="<{$returnaddress}>"/>
<input name="resultType" type="hidden" value="0"/>
<input name="orderDate" type="hidden" value="<{$nowtime}>"/>
<input name="merSignMsg" type="hidden" value="<{$ssrc}>" />
<input name="merCert" type="hidden" value="<{$cert}>" />
</form>
❷ PHP對接第三方支付渠道之微信支付v3版本
文接上篇 PHP如何更科學地接入第三方渠道 ,既然已經寫到這了,索性創建了一個gitee倉庫,地址: https://gitee.com/wuzhh/tp6-payment ,有需要的可以去看看。
言歸正傳,微信支付v3版本剛推出不久,鑒於微信官方一貫語焉不詳的尿性,論壇上自然仍舊一片哀嚎,鄙人一路踩坑下來,倒也還算順利,把過程分享給大家參考~
在微信商戶平台中找到API安全,這一步按照官方提示操作即可,比較簡單不再贅述
注意,第1步中導出的證書有三個文件,以我的經驗只有apiclient_key.pem是有用的,apiclient_cert.pem則沒什麼用(沒發現它有什麼用),拿到apiclient_key.pem的路徑之後:
上面是官方提供的命令,此處:
apiV3key = 設置的v3秘鑰
mchId = 商戶號
mchPrivateKeyFilePath = apiclient_key.pem的路徑
mchSerialNo = 商戶API證書序列號
outputFilePath = 微信支付平台證書的存儲路徑
你可能會問,-c參數填啥?這里需要說一下這個參數是驗證證書用的,填的是微信支付平台證書的路徑,因為我們現在是 第一次創建證書,所以-c參數不需要填寫 ,需要特別注意一下。
這樣就能確保上文注入的支付實例都有共同的支付和回調方法
有部分方法文中沒上,我個人的項目中用上了,就暫且保留吧
通知部分過段時間再更,明天就算端午節就更到這了,有需要的小夥伴可以留言,我爭取盡快補上~
❸ php 後台怎麼把多種支付方式集成在一起 可以先擇性安裝
本文將介紹如何快速通過PHP類庫來集成、整合支付寶來實現充值功能。如果你的系統想要擴充積分、賬戶余額等功能,那麼就要選擇一個第三方支付系統來充值。
支付寶集成時,需要三大步:
1、通過表單提交信息,系統整合信息,提交信息到支付寶;
2、用戶進行支付後,支付寶後台通知系統處理;
3、支付寶後台通知完成後,支付寶前台跳轉到系統返回地址;
支付寶PHP類
PHP 類alipay_notify,主要功能是付款過程中伺服器通知處理。
PHP 類alipay_service,根據支付寶外部服務介面生成支付寶地址。
我把這2個類,集中到一個文件alipay.class.inc中,點擊這里查看並下載PHP支付寶類源碼。
下面主要主要講解通過支付寶的PHP類來實現整合。
PHP支付寶集成
第一步,建立提交充值的基本信息:
fubao-chong PHP支付寶集成 建立提交充值的基本信息
第二步,驗證用戶提交的金額正確,通過表單驗證後,通過支付寶alipay_service類生成支付寶鏈接,然後跳轉到支付寶鏈接。
function index() {
$total = intval($_POST['total']);
if (!$total) {
$total = 1;
}
$pay_bank = trim($_POST['pay_bank']);
$account = $_POST['_account'];
$base_path = 『http://』.$_SERVER['HTTP_HOST'].base_path();
$order_id = date(『YmdHis』, time()); //時間值作為唯一的訂單ID號
$subject = $body = 『LixiPHP充值』.$total.』元』;
$out_trade_no = date(『YmdHis』, time()).』-』.$account->student['sid'];
//合作身份者ID,以2088開頭的16位純數字
$partner = 』20887015**9*7**』;
//安全檢驗碼,以數字和字母組成的32位字元
$security_code = 『gc2qxh4**ab***3jp8*****2ptxewks4′;
//簽約支付寶賬號或賣家支付寶帳戶
$seller_email = 『[email protected]』;
$_input_charset = "UTF-8";
$sign_type = "MD5"; //簽名方式
$transport = 『https』;//字元編碼格式
$parameter = array(
"service" => "create_direct_pay_by_user", //交易類型
"partner" => $partner, //合作商戶號
"return_url" => $base_path.』alipay/return』, //同步返回
"notify_url" => $base_path.』alipay/notify』, //非同步返回
"_input_charset" => 『UTF-8′, //字元集,默認為GBK
"subject" => $subject, //商品名稱,必填
"body" => $subject, //商品描述,必填
"out_trade_no" => $out_trade_no, //商品外部交易號,必填(保證唯一性)
"price" => $total, //商品單價,必填(價格不能為0)
"payment_type" => "1", //默認為1,不需要修改
"quantity" => "1", //商品數量,必填
"paymethod" => 『directPay』,
"defaultbank" => $pay_bank,
"logistics_fee" =>』0.00′, //物流配送費用
"logistics_payment" =>』BUYER_PAY』, //物流費用付款方式:SELLER_PAY(賣家支付)、BUYER_PAY(買家支付)、BUYER_PAY_AFTER_RECEIVE(貨到付款)
"logistics_type" =>』EXPRESS』, //物流配送方式:POST(平郵)、EMS(EMS)、EXPRESS(其他快遞)
//"receive _mobile" => 」, //收貨人手機
"show_url" => $base_path, //商品相關網站
"seller_email" => $seller_email, //賣家郵箱,必填
);
require("../libraries/payment/alipay.class.inc");
$alipay = new alipay_service($parameter, $security_code, $sign_type);
$link = $alipay->create_url();
header("Location: ".$link);
}
用戶跳轉到支付寶支付界面後,默認的支付銀行是在提交表單前選擇的網上銀行,選擇支付寶的話就是使用支付寶余額支付。然後就是等待用戶支付了。用戶完成支付後,請會發生下面的幾個步驟,當然如果用戶放棄支付的話,就沒有後面的處理了。
第三步,用戶進行支付後,支付寶後台通知系統處理。系統處理頁面主要是根據生成支付寶鏈接是使用的notify_url來決定的。它處理完成後,成功返回success,失敗返回fail,如果支付寶收到的是fail,那麼支付寶還會在隔1小時,1天,1周等周期再次通知伺服器處理,這里的周期需求向支付寶詢問。如果支付寶收到的是success,注意支付寶好像在一個月後要發送一次TRADE_FINISHED表示交易完成,這個一定不要再給用戶加一次充值了。
function alipay_notify() {
$out_trade_no = date(『YmdHis』, time()).』-』.$account->student['sid'];
//合作身份者ID,以2088開頭的16位純數字
$partner = 』20887015**9*7**』;
//安全檢驗碼,以數字和字母組成的32位字元
$security_code = 『gc2qxh4**ab***3jp8*****2ptxewks4′;
//簽約支付寶賬號或賣家支付寶帳戶
$seller_email = 『[email protected]』;
$sign_type = "MD5";
$_input_charset = 『UTF-8′;
$transport = 『https』;
require("../libraries/payment/alipay.class.inc");
$alipay = new alipay_notify($partner,$security_code,$sign_type,$_input_charset,$transport);
$verify_result = $alipay->notify_verify();
//支付寶 Notice verify
if($verify_result) {
//認證合格
//獲取支付寶的反饋參數
//獲取支付寶傳遞過來的訂單號
$order_id = $_POST['out_trade_no'];
//獲取支付寶傳遞過來的總價格
$total_fee = $_POST['total_fee'];
//拆分訂單號為訂單和學員ID
$txn_id = explode(『-』, $order_id);
$real_orderid = $txn_id[0]; //get the real order
$sid = $txn_id[1];
if($_POST['trade_status'] == 『TRADE_SUCCESS』) {
//這里放入你自定義代碼,比如根據不同的trade_status進行不同操作
mysql_query("UPDATE {student} set balance = balance+%d where sid = %d", (int) $total_fee, $sid);
mysql_query("INSERT INTO {payment_receipts} (sid, order_id, amount, received) VALUES (%d, 『%s』, %f, %d)", $sid, $real_orderid, (int) $total_fee, time());
echo "success";
}
else {
echo "fail";
}
}
else {
echo "fail";
}
}
第四步,用戶完成支付後,支付寶前台跳轉到系統返回地址。這個頁面其實可以只做一個非常簡單頁面,不用做任何驗證。但是為了安全建議也做一下返回驗證。但是最後不要在返回頁面做資料庫操作。
function alipay_return() {
$out_trade_no = date(『YmdHis』, time()).』-』.$account->student['sid'];
//合作身份者ID,以2088開頭的16位純數字
$partner = 』20887015**9*7**』;
//安全檢驗碼,以數字和字母組成的32位字元
$security_code = 『gc2qxh4**ab***3jp8*****2ptxewks4′;
//簽約支付寶賬號或賣家支付寶帳戶
$seller_email = 『[email protected]』;
$sign_type = "MD5";
$_input_charset = 『UTF-8′;
$transport = 『https』;
require("../libraries/payment/alipay.class.inc");
$alipay = new alipay_notify($partner,$security_code,$sign_type,$_input_charset,$transport);
$verify_result = $alipay->return_verify();
$order_id = $_GET['out_trade_no']; //獲取訂單號
$total_fee = (int) $_GET['total_fee']; //獲取總價格
$txn_id = explode(『-』, $order_id);
$real_orderid = $txn_id[0]; //get the real order
$sid = $txn_id[1];
//認證合格
if($verify_result) {
$output = 『<h2>恭喜您,學員ID』.$sid.』充值』.$total_fee.』元成功!</h2>』;
$student = mysql_query("SELECT uid, balance FROM {student} WHERE sid = %d", $sid);
$output .= 『<p>您目前的余額』.$student->balance.』元。</p>』;
$output .= l(『查看記錄』, 『user/』.$student->uid.』/depositlogs』);
return $output;
}
else {
$output = 『<h2>你的訂單支付過程出現故障!</h2>』;
$output .= 『<p>您的交易信息是無效的,如果你使用的是已有的返回信息的話,那麼交易已經成立,你可以查看我的訂單歷史。<br>如果你是黑客的話,俺是守法的好公民,希望你能饒了我這個小店。』;
$output .= 『</p><p><a href="/">返回首頁</a></p>』;
return $output;
}
}
如果用戶是惡意修改網址參數,將會看到:
callback return failed 如果用戶是惡意修改網址參數
如果用戶正常通過支付寶自動跳轉回來的,將會看到:
callback return success 如果用戶正常通過支付寶自動跳轉回來的
好的,趕快將以上方法和代碼應用到你的積分、賬戶余額系統把!
❹ PHP 支付寶網頁支付怎麼寫
1)打開上面的網頁,從頁面下方的7中支付方式中選擇你需要的方式並點擊進去,
2)點擊demo下載選擇對應你需求的demo
3)把demo代碼引入到你的php項目中,lib里的內容不需要你做任何更改,閱讀readme說明文檔,在吧除lib外的php文件都看一遍,裡面每個參數的作用都說明的很清楚,文件里的index.php就是你要用curl去模擬支付請求的路徑,當然你配置完成後也可以打開index.php去完成一次支付
❺ PHP碼支付V3.1開源版程序誰有
V免簽 —— 個人開發者收款解決方案
V免簽 是基於SpringBoot 2.1.1 實現的一套免簽支付程序,主要包含以下特色:
收款即時到賬,無需進入第三方賬戶,收款更安全
使用H2-Database,僅需安裝java環境,簡單配置,一鍵搭建
超簡單Api使用,提供統一Api實現收款回調
免費、開源,無後門風險
支持監聽店員收款信息,可使用支付寶微信小號/模擬器掛機,方便IOS用戶
免root,免xp框架,不修改支付寶/微信客戶端,防封更安全
- 如果您不熟悉Java的配置,您可以使用PHP版本的服務端
- V免簽僅供個人開發者調試測試使用,請勿用於非法用途,商用請您申請官方商戶介面
- 項目詳情和地址更多核心內容在文章最後壓軸
下載已經編譯好的war
確認本機已經擁有java的運行環境(JDK>=1.8),如果沒有,請您安裝java的運行環境
在war包的同級目錄,在控制台輸入啟動命令 java -jar v.war
請將v.war替換成您下載的war包的名字
如果您需要自定義項目的運行埠,請您在啟動的時候使用:java -jar v.war --server.port=9090 (9090可以替換成任意埠)
打開瀏覽器,訪問 localhost:8080
點擊系統設置,進入設置頁面,修改系統的默認配置
默認管理賬號為:admin
默認通訊密鑰為:admin
保存配置後,即可開始使用
- 升級說明:請您直接下載新版本覆蓋舊版本即可!
請部署完成後訪問後台,有詳細的Api說明
本系統原理為監控收款後手機的通知欄推送消息,所以請保持微信/支付寶/V免簽監控端後台正常運行,且添加到內存清理白名單!
v免簽的原理是監控手機收到收款後的通知欄推送信息,所以不適合於商用多用戶的情況,如果您想用於商用,請二次開發!
v免簽擁有雙語言服務端,當您使用php版本服務端遇到問題的時候,請您嘗試使用java版本服務端,php版本服務端配置略復雜,需要配置偽靜態規則,請知悉!
v免簽支持的通知有:
支付寶個人收款的推送通知
支付寶商家二維碼的收款推送通知
支付寶店員通綁定的店員賬號收款的推送通知
微信二維碼收款推送通知
微信店員收款推送通知
後台演示:
安裝
說明
注意
Github 地址
https://github.com/zql001/liaotui_public/blob/master/READEME3.md
❻ Thinkphp5.1寰淇″皬紼嬪簭鏀浠
鐮旂┒浜嗗ソ鍑犲ぉ錛屽潙涔熼亣鍒頒簡錛屼篃鐧懼害浜嗗緢涔呯幇鍦ㄧ粓浜庡仛瀹屼簡錛岀粰澶у跺垎浜鍑烘潵錛
鎴戣繖涓涔熸槸鍙傝冨埆浜哄啓鐨勩傛湁涓嶆槑鐧界殑鏈嬪弸鍙浠ラ棶鎴
public function unifiedorder($order_no, $openid, $total_fee, $attach, $order_id, $user_id){
// 褰撳墠鏃墮棿
$time = time();
// 鐢熸垚闅忔満瀛楃︿覆
$nonceStr = md5($time . $openid);
// API鍙傛暟
$params = [
'appid' => $this->appid, //寰淇″垎閰嶇殑灝忕▼搴廼d
'attach' => $attach, //闄勫姞鏁版嵁錛屽湪鏌ヨAPI鍜屾敮浠橀氱煡涓鍘熸牱榪斿洖錛屽彲浣滀負鑷瀹氫箟鍙傛暟浣跨敤銆
'body' => '浼氬憳鍗', //鍕熸崘鎻忚堪
'mch_id' => $this->mchid, //寰淇℃敮浠樺垎閰嶇殑鍟嗘埛鍙
'nonce_str' => $nonceStr, //闅忔満瀛楃︿覆錛32浣嶄互鍐
'notify_url' => $this->notify_url, // base_url() . 'notice.php?s=/task/notify/order/wxapp_id/'.$wxapp_id, // 寮傛ラ氱煡鍦板潃
'openid' => $openid, //鐢ㄦ埛鏍囪瘑錛泃rade_type=JSAPI錛屾ゅ弬鏁板繀浼狅紝鐢ㄦ埛鍦ㄥ晢鎴穉ppid涓嬬殑鍞涓鏍囪瘑銆
'out_trade_no' => $order_no, //鍟嗘埛璐﹀崟鍙
'spbill_create_ip' => \request()->ip(), //緇堢疘P錛涙敮鎸両PV4鍜孖PV6涓ょ嶆牸寮忕殑IP鍦板潃銆傝皟鐢ㄥ井淇℃敮浠楢PI鐨勬満鍣↖P
'total_fee' => (int)$total_fee * 100, // 浠鋒牸:鍗曚綅鍒 // 浠鋒牸:鍗曚綅鍒
'trade_type' => 'JSAPI', //浜ゆ槗綾誨瀷
];
// 鐢熸垚絳懼悕
$params['sign'] = $this->makeSign($params); //榪欎釜鍦版柟鏈鍧戱紝闇瑕佺殑鏄閰嶇疆 1銆乤ppid鍜屽晢鎴峰彿蹇呴』鏄緇戝畾鐨勭姸鎬
// 璇鋒眰API
$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
$result = $this->post($url, $this->toXml($params));
$prepay = $this->fromXml($result);
//娣誨姞preapay_id
$data = [
'user_id' => $user_id,
'order_id' => $order_id,
'attach' => json_encode($attach),
'prepay_id' => $prepay['prepay_id'],
];
(new AppleWxPrepay())->addInfo($data);
// 璇鋒眰澶辮觸
if ($prepay['return_code'] === 'FAIL') {
return [API_CODE_NAME => 2000004, API_MSG_NAME => $prepay['return_msg']];
}
if ($prepay['result_code'] === 'FAIL') {
return [API_CODE_NAME => 2000004, API_MSG_NAME => $prepay['err_code_des']];
}
// 鐢熸垚 nonce_str 渚涘墠絝浣跨敤
$paySign = $this->makePaySign($params['nonce_str'], $prepay['prepay_id'], $time);
return [
'prepay_id' => $prepay['prepay_id'],
'nonceStr' => $nonceStr,
'timeStamp' => (string)$time,
'paySign' => $paySign
];
}
/**
* 鐢熸垚絳懼悕
* @param $values
* @return string 鏈鍑芥暟涓嶈嗙洊sign鎴愬憳鍙橀噺錛屽傝佽劇疆絳懼悕闇瑕佽皟鐢⊿etSign鏂規硶璧嬪
*/
private function makeSign($values)
{
//絳懼悕姝ラや竴錛氭寜瀛楀吀搴忔帓搴忓弬鏁
ksort($values);
$string = $this->toUrlParams($values);
//絳懼悕姝ラや簩錛氬湪string鍚庡姞鍏KEY
$string = $string . '&key=' . $this->apikey;
//絳懼悕姝ラや笁錛歁D5鍔犲瘑
$string = md5($string);
//絳懼悕姝ラゅ洓錛氭墍鏈夊瓧絎﹁漿涓哄ぇ鍐
$result = strtoupper($string);
return $result;
}
/**
* 鏍煎紡鍖栧弬鏁版牸寮忓寲鎴恥rl鍙傛暟
* @param $values
* @return string
*/
private function toUrlParams($values)
{
$buff = '';
foreach ($values as $k => $v) {
if ($k != 'sign' && $v != '' && !is_array($v)) {
$buff .= $k . '=' . $v . '&';
}
}
return trim($buff, '&');
}
/**
* 妯℃嫙POST璇鋒眰
* @param $url
* @param array $data
* @param bool $useCert
* @param array $sslCert
* @return mixed
*/
public function post($url, $data = [], $useCert = false, $sslCert = [])
{
$header = [
'Content-type: application/json; charset=UTF8'
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
if ($useCert == true) {
// 璁劇疆璇佷功錛歝ert 涓 key 鍒嗗埆灞炰簬涓や釜.pem鏂囦歡
curl_setopt($curl, CURLOPT_SSLCERTTYPE, 'PEM');
curl_setopt($curl, CURLOPT_SSLCERT, $sslCert['certPem']);
curl_setopt($curl, CURLOPT_SSLKEYTYPE, 'PEM');
curl_setopt($curl, CURLOPT_SSLKEY, $sslCert['keyPem']);
}
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
/**
* 杈撳嚭xml瀛楃
* @param $values
* @return bool|string
*/
private function toXml($values)
{
if (!is_array($values) || count($values) <= 0) {
return false;
}
$xml = "<xml>";
foreach ($values as $key => $val) {
if (is_numeric($val)) {
$xml .= "<" . $key . ">" . $val . "</" . $key . ">";
} else {
$xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
}
}
$xml .= "</xml>";
return $xml;
}
/**
* 灝唜ml杞涓篴rray
* @param $xml
* @return mixed
*/
private function fromXml($xml)
{
// 紱佹㈠紩鐢ㄥ栭儴xml瀹炰綋
libxml_disable_entity_loader(true);
return json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
}
/**
* 鐢熸垚paySign
* @param $nonceStr
* @param $prepay_id
* @param $timeStamp
* @return string
*/
private function makePaySign($nonceStr, $prepay_id, $timeStamp)
{
$data = [
'appId' => $this->appid,
'nonceStr' => $nonceStr,
'package' => 'prepay_id=' . $prepay_id,
'signType' => 'MD5',
'timeStamp' => $timeStamp,
];
// 絳懼悕姝ラや竴錛氭寜瀛楀吀搴忔帓搴忓弬鏁
ksort($data);
$string = $this->toUrlParams($data);
// 絳懼悕姝ラや簩錛氬湪string鍚庡姞鍏KEY
$string = $string . '&key=' . $this->apikey;
// 絳懼悕姝ラや笁錛歁D5鍔犲瘑
$string = md5($string);
// 絳懼悕姝ラゅ洓錛氭墍鏈夊瓧絎﹁漿涓哄ぇ鍐
$result = strtoupper($string);
return $result;
}
/*********************************寰淇″洖璋**********************/
public function getNotify()
{
if (!$xml = file_get_contents('php://input')) {
$this->returnCode(50000001, 'Not found DATA');
}
// 灝嗘湇鍔″櫒榪斿洖鐨刋ML鏁版嵁杞鍖栦負鏁扮粍
$data = $this->fromXml($xml);
$payLog = new ApplePayLog();
// 璁板綍鏃ュ織
$payLog->addInfo(['content'=>json_encode($xml)]);
$payLog->addInfo(['content'=>json_encode($data)]);
// 瀹炰緥鍖栬處鍗曟ā鍨
$OrderModel = new AppleOrder();
// 璐﹀崟淇℃伅
$orderInfo = $OrderModel->getInfo(['id'=>$data['attach']],'*');
if (empty($orderInfo)) {
$this->returnCode(50000001, '璐﹀崟涓嶅瓨鍦');
}
if($orderInfo['pay_status'] != 1 || !empty($orderInfo['pay_time'])){
$this->returnCode(50000001,'璁㈠崟宸叉敮浠橈紝璇峰嬁鍐嶆℃敮浠');
}
// 淇濆瓨寰淇℃湇鍔″櫒榪斿洖鐨勭懼悕sign
$dataSign = $data['sign'];
$return_code = $data['return_code'];
$result_code = $data['result_code'];
$data['body'] = '浼氬憳鍗';
$data['spbill_create_ip'] = \request()->ip();
$data['notify_url'] = $this->notify_url;
// sign 涓 s 鍙傛暟 涓嶅弬涓庣懼悕綆楁硶
unset($data['sign']);
unset($data['transaction_id']);
unset($data['coupon_id']);
unset($data['coupon_type']);
unset($data['coupon_count']);
unset($data['coupon_fee']);
unset($data['time_end']);
unset($data['return_code']);
unset($data['result_code']);
unset($data['is_subscribe']);
unset($data['fee_type']);
unset($data['bank_type']);
unset($data['bank_type']);
// 鐢熸垚絳懼悕
$sign = $this->makeSign($data);
// 鍒ゆ柇絳懼悕鏄鍚︽g『 鍒ゆ柇鏀浠樼姸鎬
if (($sign === $dataSign) && ($return_code == 'SUCCESS') && ($result_code == 'SUCCESS')) {
$OrderModel->startTrans();
try {
// 璐﹀崟鏀浠樻垚鍔熶笟鍔″勭悊
$appleOrderInfo = $OrderModel->where(['id'=>$orderInfo['id']])->lock(true)->find();
$result = $appleOrderInfo->addInfo(['pay_status'=>2,'pay_time'=>time()],['id'=>$orderInfo['id']]);
if(!$result){
$OrderModel->rollback();
$this->returnCode(5000003, '淇鏀硅㈠崟澶辮觸錛屽け璐ュ師鍥狅細'.$OrderModel->getError());
}
$appleUserModel = new AppleUser();
$appleUserInfo = $appleUserModel->where(['openid'=>$orderInfo['openid']])->lock(true)->find();
$appleUser = $appleUserInfo->where(['openid'=>$orderInfo['openid']])->setInc('moxibustion',$orderInfo['moxibustion']);
if(!$appleUser){
$OrderModel->rollback();
$this->returnCode(5000003, '娣誨姞浼氬憳閽堢伕嬈℃暟澶辮觸錛屽け璐ュ師鍥狅細'.$appleUserModel->getError());
}
}catch (\Exception $exception){
$OrderModel->rollback();
$this->returnCode(5000003, '鎿嶄綔澶辮觸錛屽け璐ュ師鍥狅細'.$exception->getMessage());
}
$OrderModel->commit();
// 榪斿洖鐘舵
die(json(['code'=>0,'鏀浠樻垚鍔']));
}
// 榪斿洖鐘舵
$this->returnCode(2000003, '絳懼悕澶辮觸');
}
❼ 如何利用PHP語言開發平台第三方支付介面
第一步:簽訂合約通過第三方拿到介面(可以郵件形式發送、也可以在第三方系統下載),拿到介面後,要確認下介面類型,是否是自己需要的介面,比如B2C介面、B2B介面等類型。
第二步:支付介面分很多語言版本,比如ASP、JSP、PHP、.NET語言版本,所以要選擇與自己網站語言匹配的介面進行安裝。商城網站的技術一般比較清楚商城的開發語言。
第三步:拿到的支付介面一般包括介面文檔和介面代碼示例,選擇合適的介面代碼示例,進行聯調,比如自己網站是PHP開發的,就選擇PHP代碼示例聯調。
第四步:介面聯調的時候,需要第三方支付提供聯調測試賬號,方可以聯調。聯調除了需要聯調賬號除外,還需要該賬號的支付密鑰,聯調過程中,有什麼問題,可以直接找第三方支付技術支持給予協調處理。
第五步:介面聯調通過後,可先換成生產環境賬號,進行交易測試,測試沒問題後,可以放到商城網站進行交易。