本文目錄一覽:
- 1、你好 !! PHP如何實現微信支付 求指教 新手!說清楚一點
- 2、php為什麼支付成功了返回fail
- 3、如何用PHP實現微信支付,求教。新手!說明詳細點
- 4、微信支付開發:發起一個支付點擊支付提示 get_brand_wcpay_request:fail_invalid appid錯誤
你好 !! PHP如何實現微信支付 求指教 新手!說清楚一點
通知機制的實現,官方只有文檔沒有demo代碼,對沒搞過的人來說,需要花大量時間來做測試。
從文檔上說的來看,微信每次通知過來的數據,結構比較複雜,是一個多段數據,除了要取出POST數據外,還要取其它的數據。
這裡首先涉及到一個關於php://input與$_POST取值的問題,簡單列幾點如下:
1,Content- Type取值為application/x-www-form-urlencoded時,php會將http請求body相應數據會填入到數組$_POST,填入到$_POST數組中的數據是進行urldecode()解析的結果。(其實,除了該Content-Type,還有 multipart/form-data表示數據是表單數據,稍後我們介紹)
2,php://input數據,只要Content-Type不為 multipart/form-data(該條件限制稍後會介紹)。那麼php://input數據與http entity body部分數據是一致的。該部分相一致的數據的長度由Content-Length指定。
3,僅當Content-Type為application/x-www-form-urlencoded且提交方法是POST方法時,$_POST數據與php://input數據才是”一致”(打上引號,表示它們格式不一致,內容一致)的。其它情況,它們都不一致。
4,php://input讀取不到$_GET數據。是因為$_GET數據作為query_path寫在http請求頭部(header)的PATH字段,而不是寫在http請求的body部分。
幫助我們了解了為什麼xml_rpc服務端讀取數據都是通過file_get_contents(‘php://input’, ‘r’)。
而不是從$_POST中讀取,正是因為xml_rpc數據規格是xml,它的Content-Type是text/xml。
5. php://input碰到了multipart/form-data,請查閱RFC1867對它的描述。multipart/form-data也表示以POST方法提交表單數據,它還伴隨了文件上傳,所以會跟application/x- www-form-urlencoded數據格式不一樣。它會以一更種更合理的,更高效的數據格式傳遞給服務端。當Content-Type為multipart/form-data的時候,即便http請求body中存在數據,php://input也為空,PHP此時,不會把數據填入php://input流。所以,可以確定: php://input不能用於讀取enctype=multipart/form-data數據。
6. 當Content-Type為application/x- www-form-urlencoded時,php://input和$_POST數據是“一致”的,為其它Content-Type的時候,php: //input和$_POST數據數據是不一致的。因為只有在Content-Type為application/x-www-form- urlencoded或者為multipart/form-data的時候,PHP才會將http請求數據包中的body相應部分數據填入$_POST全局變量中,其它情況PHP都忽略。而php://input除了在數據類型為multipart/form-data之外為空外,其它情況都可能不為空
以上轉述這麼多文字的意思,就是說,得用到這兩種方式來讀取微信傳過來的數據。 ..
php為什麼支付成功了返回fail
php支付成功了返回fail是因為後台處理成功了,但是頁面報錯導致提示錯誤。
?php
$service = isset( $_GET [ ‘service’ ]) ? $_GET [ ‘service’ ] : ‘create_direct_pay_by_user’ ;
$services = array( //交易類型
‘create_direct_pay_by_user’ = ‘即時到賬’ ,
‘create_partner_trade_by_buyer’ = ‘擔保交易’ ,
);
if(! array_key_exists ( $service , $services )) exit( ‘錯誤的交易類型’ );
?
p style=”border:2px dotted blue;width:auto;”
label請選擇交易類型:/label
?php foreach ( $services as $key = $val ): ?
?php if( $service == $key ): ?
b style=”color:red”?php echo $val ; ? /b
?php else: ?
ba href=”?php echo url (array( ‘service’ = $key )); ? “?php echo $val ; ? /a/b
?php endif; ?
?php endforeach; ?
/p
?php
//php支付寶支付接口參數 主要如下
//(合作商戶編號,加密串,返回url, 默認編碼,商品名稱,商品簡介,商戶訂單號,物流配送費用)
function getRequestUrl ( $partner , $scode , $return_url , $charset , $subject , $body , $order , $lfee ) {
global $data , $service ;
# 支付寶交易類型
$data [ ‘service’ ] = $service ; //create_partner_trade_by_buyer[擔保交易]create_direct_pay_by_user[即時到賬]
# 合作商戶編號
$data [ ‘partner’ ] = $partner ;
# 請求返回地址
$data [ ‘return_url’ ] = $return_url ;
# 默認編碼
$data [ ‘_input_charset’ ] = $charset ;
# 默認支付渠道
$data [ ‘paymenthod’ ] = ‘bankPay’ ;
# 默認的網銀
$data [ ‘defaultbank’ ] = ‘ICBCB2C’ ;
# 商品名稱
$data [ ‘subject’ ] = $subject ;
# 商品展示URL
$data [ ‘show_url’ ] = ’‘ ;
# 異步通知返回
$data [ ‘notify_url’ ] = ’‘ ;
# 商品簡介
$data [ ‘body’ ] = $body ;
# 商戶訂單號
$data [ ‘out_trade_no’ ] = $order ;
# 物流配送費用
$data [ ‘logistics_fee’ ] = $lfee ;
# 物流費用付款方式
$data [ ‘logistics_payment’ ] = ‘SELLER_PAY’ ; //SELLER_PAY(賣家支付)、BUYER_PAY(買家支付)、BUYER_PAY_AFTER_RECEIVE(貨到付款)
# 物流配送方式
$data [ ‘logistics_type’ ] = ‘POST’ ; //物流配送方式:POST(平郵)、EMS(EMS)、EXPRESS(其他快遞)
# 價格
$data [ ‘price’ ] = ‘10.00’ ;
#$data[‘total_fee’] = ‘10.00’;
# 付款方式
$data [ ‘payment_type’ ] = ‘1’ ;
# 商品數量
$data [ ‘quantity’ ] = ‘1’ ;
# 賣家email
$data [ ‘seller_email’ ] = ‘chen@sjolzy.cn’ ;
$data = array_filter ( $data );
ksort ( $data ); reset ( $data );
$data [ ‘sign’ ] = md5 ( urldecode ( http_build_query ( $data )). $scode );
$data [ ‘sign_type’ ] = ‘MD5’ ;
$url = ‘?’ . http_build_query ( $data );
return $url ;
}
//把支付寶接口的參數 帶入進去測試
$url = getRequestUrl ( ‘2010101908738750’ , ‘ma0werwert6s2bsd1frg7hisaiaz5xjr’ , ” , ‘UTF-8’ , ‘測試商品’ , ‘測試內容’ , uniqid (), ‘0.00’ );
如何用PHP實現微信支付,求教。新手!說明詳細點
以PHP語言為例,對微信支付的開發流程進行一下說明:
1.獲取訂單信息。
2.根據訂單信息和支付相關的賬號生成sign,並且生成支付參數。
3.將支付參數信息POST到微信服務器,獲取返回信息。
4.根據返回信息生成相應的支付代碼(微信內部)或是支付二維碼(非微信內),完成支付。
微信支付開發:發起一個支付點擊支付提示 get_brand_wcpay_request:fail_invalid appid錯誤
說一下我的解決辦法,供大家參考。這個問題的原因還是在微信支付-開發配置的授權目錄設定上,我使用的官方php demo(普通公眾號微信支付),微信支付的調用腳本getBrandWCPayRequest所在的頁面需要是普通的php項目結構,如果是mvc就會報出上面的invalid appid錯誤。所以,我把微信支付的js調用頁面單獨拿出作為一個新的項目就ok了。為了避免mvc到普通php項目結構轉移的麻煩,只需要把getBrandWCPayRequest 的js代碼塊拿到新項目中即可,至於js中使用的動態參數,可以在mvc中整理好以參數的形式傳遞到新項目的微信支付調用頁面即可,支付成功後的異步通知頁面也仍可以寫在mvc項目中。目前該辦法解決了我的微信支付問題,如果有網友解決了mvc的授權問題,可以補充一下。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/184844.html