導航:首頁 > 編程語言 > php支付整合

php支付整合

發布時間:2023-06-14 05:17:51

Ⅰ 如何用php實現微信支付,求教。新手!說明詳細點

以PHP語言為例,對微信支付的開發流程進行一下說明:

1.獲取訂單信息。

2.根據訂單信息和支付相關的賬號生成sign,並且生成支付參數。

3.將支付參數信息POST到微信伺服器,獲取返回信息。

4.根據返回信息生成相應的支付代碼(微信內部)或是支付二維碼(非微信內),完成支付。

Ⅱ 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網站如何集成銀聯的在線支付

銀聯官方有SDK文件,也有案例。
你下載下來,看一下就明白了!
大概分幾步,
1,你自己的網站把要交易的數據post給銀聯,
2,銀聯處理你post過來的數據,然後用戶輸入一些賬號信息,付款。
3,付款後,銀聯會post交易後的數據給你的網站,(這個地址會在開始你傳給銀聯的的數據裡面)
4,你接受銀聯傳輸回來的數據,自己處理!
注意的是,回調地址有個後台的,還有個前台的,不要搞混亂了!

Ⅳ 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實現 APP端微信支付功能

一丶PHP後台後台生成預支付交易單,返回正確的預支付交易回話標識後再在APP裡面調起支付!官方文檔:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1

根據文檔拼接微信需要的參數,這里需要幾個方法,直接上代碼!

傳輸給微信的參數要組裝成xml格式發送,傳如參數數組!
publicfunctionToXml($data=array())

{
if(!is_array($data)||count($data)<=0)
{
return'數組異常';
}

$xml="";
foreach($dataas$key=>$val)
{
if(is_numeric($val)){
$xml.="<".$key.">".$val."";
}else{
$xml.="<".$key.">";
}
}
$xml.="";
return$xml;
}

2.生成隨機字元串,微信所需參數!這里方法很多,看自己愛好都行!

functionrand_code(){
$str='';//62個字元
$str=str_shuffle($str);
$str=substr($str,0,32);
return$str;
}

3.這里是微信比較重要的一步了,這個方法會多次用到!生成簽名

privatefunctiongetSign($params){
ksort($params);//將參數數組按照參數名ASCII碼從小到大排序
foreach($paramsas$key=>$item){
if(!empty($item)){//剔除參數值為空的參數
$newArr[]=$key.'='.$item;//整合新的參數數組
}
}
$stringA=implode("&",$newArr);//使用&符號連接參數
$stringSignTemp=$stringA."&key="."************************";//拼接key
//key是在商戶平台API安全里自己設置的
$stringSignTemp=MD5($stringSignTemp);//將字元串進行MD5加密
$sign=strtoupper($stringSignTemp);//將所有字元轉換為大寫
return$sign;
}

4.傳遞參數給微信,生成預支付訂單!接收微信返回的數據,在反給APP端,APP端調用支付介面,完成支付!APP端所需參數見微信文檔:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_12&index=2

publicfunctionwx_pay(){

$nonce_str=$this->rand_code();//調用隨機字元串生成方法獲取隨機字元串
$data['appid']='wxdbc5dc*******';//appid
$data['mch_id']='1493*****';//商戶號
$data['body']="APP支付測試";
$data['spbill_create_ip']=$_SERVER['HTTP_HOST'];//ip地址
$data['total_fee']=1;//金額
$data['out_trade_no']=time().mt_rand(10000,99999);//商戶訂單號,不能重復
$data['nonce_str']=$nonce_str;//隨機字元串
$data['notify_url']='https://www.5wx.org/';接收支付後的通知,必須為能直接訪問的網址,不能跟參數
$data['trade_type']='APP';//支付方式
//將參與簽名的數據保存到數組注意:以上幾個參數是追加到$data中的,$data中應該同時包含開發文檔中要求必填的剔除sign以外的所有數據
$data['sign']=$this->getSign($data);//獲取簽名
$xml=$this->ToXml($data);//數組轉xml
//curl傳遞給微信方
$url="https://api.mch.weixin.qq.com/pay/unifiedorder";
//header("Content-type:text/xml");
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
if(stripos($url,"https://")!==FALSE){
curl_setopt($ch,CURLOPT_SSLVERSION,CURL_SSLVERSION_TLSv1);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
}else{
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//嚴格校驗
}
//設置header
curl_setopt($ch,CURLOPT_SSLVERSION,CURL_SSLVERSION_TLSv1);
curl_setopt($ch,CURLOPT_HEADER,FALSE);
//要求結果為字元串且輸出到屏幕上
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
//設置超時
curl_setopt($ch,CURLOPT_TIMEOUT,30);
curl_setopt($ch,CURLOPT_POST,TRUE);
//傳輸文件
curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);
//運行curl
$data=curl_exec($ch);
//返回結果
if($data){
curl_close($ch);
//返回成功,將xml數據轉換為數組.
$re=$this->FromXml($data);
if($re['return_code']!='SUCCESS'){
json("201",'簽名失敗');
}
else{
//接收微信返回的數據,傳給APP!
$arr=array(
'prepayid'=>$re['prepay_id'],
'appid'=>'wxdbc5dc*****',
'partnerid'=>'14937****',
'package'=>'Sign=WXPay',
'noncestr'=>$nonce_str,
'timestamp'=>time(),
);
//第二次生成簽名
$sign=$this->getSign($arr);
$arr['sign']=$sign;
json('200','簽名成功',$arr);
}
}else{
$error=curl_errno($ch);
curl_close($ch);
json('201',"curl出錯,錯誤碼:$error");
}
}

5.將xml數據轉換為數組,接收微信返回數據時用到.

publicfunctionFromXml($xml)
{
if(!$xml){
echo"xml數據異常!";
}
//將XML轉為array
//禁止引用外部xml實體
libxml_disable_entity_loader(true);
$data=json_decode(json_encode(simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA)),true);
return$data;
}

二.APP支付成功後,會調用你填寫的回調地址.返回參數詳見微信文檔:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_7&index=3

//微信支付回調
functionwx_notify(){
//接收微信返回的數據數據,返回的xml格式
$xmlData=file_get_contents('php://input');
//將xml格式轉換為數組
$data=$this->FromXml($xmlData);
//用日誌記錄檢查數據是否接受成功,驗證成功一次之後,可刪除。
$file=fopen('./log.txt','a+');
fwrite($file,var_export($data,true));
//為了防止假數據,驗證簽名是否和返回的一樣。
//記錄一下,返回回來的簽名,生成簽名的時候,必須剔除sign欄位。
$sign=$data['sign'];
unset($data['sign']);
if($sign==$this->getSign($data)){
//簽名驗證成功後,判斷返回微信返回的
if($data['result_code']=='SUCCESS'){
//根據返回的訂單號做業務邏輯
$arr=array(
'pay_status'=>1,
);
$re=M('order')->where(['order_sn'=>$data['out_trade_no']])->save($arr);
//處理完成之後,告訴微信成功結果!
if($re){
echo'';exit();
}
}
//支付失敗,輸出錯誤信息
else{
$file=fopen('./log.txt','a+');
fwrite($file,"錯誤信息:".$data['return_msg'].date("Y-m-dH:i:s"),time()." ");
}
}
else{
$file=fopen('./log.txt','a+');
fwrite($file,"錯誤信息:簽名驗證失敗".date("Y-m-dH:i:s"),time()." ");
}

}

在這里,微信APP支付流程就成功走完了!謝謝支持!

---------------------

閱讀全文

與php支付整合相關的資料

熱點內容
如何看漫威漫畫app 瀏覽:789
安卓手機如何按拼音排布app 瀏覽:721
java中exceptionin 瀏覽:882
java131 瀏覽:868
學英語不登錄的app哪個最好 瀏覽:299
安卓的後台運行怎麼設置 瀏覽:135
如何撰寫論文摘要以及編譯sci 瀏覽:416
安卓如何使用推特貼吧 瀏覽:429
怎樣避免程序員入獄 瀏覽:856
蘋果方塊消除安卓叫什麼 瀏覽:535
安卓世界征服者2怎麼聯機 瀏覽:297
國企招的程序員 瀏覽:969
哪個app可以看watch 瀏覽:518
dns備用什麼伺服器 瀏覽:1002
中達優控觸摸屏編譯失敗 瀏覽:80
上海科納壓縮機 瀏覽:680
python工時系統 瀏覽:551
查好友ip命令 瀏覽:118
通達信python量化交易 瀏覽:506
cnc編程工程師自我評價 瀏覽:133