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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

支付二维码php能实现吗_(实用篇)微信支付扫码支付php版

發布時間:2024/9/15 php 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 支付二维码php能实现吗_(实用篇)微信支付扫码支付php版 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

include'ArrayToXML.php';

header('Content-Type:text/xml');/***

* 該腳本為當公眾該平臺接到Native(原生)支付請求時,會調用此回調URL獲取商品信息。*/

/**

第一步:接收微信服務器post過來的信息

(1)OpenId,點擊鏈接準備購買商品的用戶openid

(2)AppId,公眾帳號的appid

(3)IsSubscribe,標記用戶是否訂閱該公眾帳號,1 為關注,0 為未關注

(4)ProductId,第三方的商品ID號

(5)TimeStamp,時間戳

(6)NonceStr,隨機串

(7)AppSignature,參數的加密簽名,是根據2.7 支付簽名(paySign)生成方法中所講的簽名方式生成的簽名

(8)SignMethod,簽名方式,目前只支持“SHA1”。該字段不參與簽名

**/$postdata= file_get_contents("php://input");

$postObj= simplexml_load_string ( $postdata, 'SimpleXMLElement', LIBXML_NOCDATA );

$openId= $postObj->OpenId;

$AppId= $postObj->AppId;

$IsSubscribe= $postObj->IsSubscribe;

$ProductId= $postObj->ProductId;

$TimeStamp= $postObj->TimeStamp;

$NonceStr= $postObj->NonceStr;

$AppSignature= $postObj->AppSignature;

$SignMethod= $postObj->SignMethod;/**

* 第二步,生成訂單號,并且和商品信息,用戶openID等訂單信息保存在數據庫中

**/function createTradeId(){

$curDateTime= date("YmdHis");//date_default_timezone_set(PRC);

$strDate = date("Ymd");

$strTime= date("His");//4位隨機數

$randNum = rand(1000, 9999);//10位序列號,可以自行調整。

$strReq =$strTime . $randNum;/*商家的定單號*/$mch_vno=$curDateTime . $strReq;/********************/

/*todo 保存訂單信息到數據庫中*/

/********************/

return$mch_vno;

}/**

* 第三步:生成商品詳情pakage

* @param string $body 商品描述

* @param string $total_fee 訂單總金額,單位為分。

* @param string $out_trade_no 商戶系統內部的訂單號

* @return $package*/function getPackage($body,$total_fee,$out_trade_no){

$ip=$_SERVER["REMOTE_ADDR"];if($ip=="::1"||empty($ip)){

$ip="127.0.0.1";

}

$banktype= "WX";

$fee_type= "1";//費用類型,這里1為默認的人民幣

$input_charset = "GBK";//字符集,這里將統一使用GBK

$notify_url = "http://xxxxxx.com/Wxpay/notify.html";//支付成功后將通知該地址

$out_trade_no =createTradeId();//訂單號,商戶需要保證該字段對于本商戶的唯一性

$partner = "XXXXXXXX"; //商戶號

$spbill_create_ip =$ip;//訂單生成的機器IP

$partnerKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXX";//這個值和以上其他值不一樣是:簽名需要它,而最后組成的傳輸字符串不能含有它。這個key是需要商戶好好保存的。//首先第一步:對原串進行簽名,注意這里不要對任何字段進行編碼。這里是將參數按照key=value進行字典排序后組成下面的字符串,在這個字符串最后拼接上key=XXXX。由于這里的字段固定,因此只需要按照這個順序進行排序即可。

$signString = "bank_type=".$banktype."&body=".$body."&fee_type=".$fee_type."&input_charset=".$input_charset."?ify_url=".$notify_url."&out_trade_no=".$out_trade_no."&partner=".$partner."&spbill_create_ip=".$spbill_create_ip."&total_fee=".$total_fee."&key=".$partnerKey;

$md5SignValue= ("".strtoupper(md5(($signString))));//echo $md5SignValue;//然后第二步,對每個參數進行url轉碼。

$banktype =encodeURIComponent($banktype);

$body=encodeURIComponent($body);

$fee_type=encodeURIComponent($fee_type);

$input_charset=encodeURIComponent($input_charset);

$notify_url=encodeURIComponent($notify_url);

$out_trade_no=encodeURIComponent($out_trade_no);

$partner=encodeURIComponent($partner);

$spbill_create_ip=encodeURIComponent($spbill_create_ip);

$total_fee=encodeURIComponent($total_fee);//然后進行最后一步,這里按照key=value除了sign外進行字典序排序后組成下列的字符串,最后再串接sign=value

$completeString = "bank_type=".$banktype."&body=".$body."&fee_type=".$fee_type."&input_charset=".$input_charset."?ify_url=".$notify_url."&out_trade_no=".$out_trade_no."&partner=".$partner."&spbill_create_ip=".$spbill_create_ip."&total_fee=".$total_fee;

$completeString= $completeString."&sign=".$md5SignValue;

$oldPackageString= $completeString; //記住package,方便最后進行整體簽名時取用

return$completeString;

}//模擬js中的encodeURIComponent方法

function encodeURIComponent($str) {

$revert= array('%21'=>'!', '%2A'=>'*', '%27'=>"'", '%28'=>'(', '%29'=>')');returnstrtr(rawurlencode($str), $revert);

}/**

第四步:

為了返回Package 數據,回調URL 必須返回一個xml 格式的返回數據,形如:

1369745073

0

RetErrMsg>

SignMethod >

對于一些第三方覺得商品已經過期或者其他錯誤的情況,可以在RetCode 和

RetErrMsg 中體現出來,RetCode 為0 表明正確,可以定義其他錯誤;當定義其他錯誤時,

可以在RetErrMsg 中填上UTF8 編碼的錯誤提示信息,比如“該商品已經下架”,客戶端會

直接提示出來。

**/$data=array("AppId"=>$AppId,"Package"=>getPackage("測試商品",100,"201311291504302501231"),"TimeStamp"=>strtotime(),"NonceStr"=>$NonceStr,"RetCode"=>0, //RetCode 為0 表明正確,可以定義其他錯誤;當定義其他錯誤時,可以在RetErrMsg 中填上UTF8 編碼的錯誤提示信息,比如“該商品已經下架”,客戶端會直接提示出來。

"RetErrMsg"=>"正確返回","AppSignature"=>$AppSignature,"SignMethod"=>"sha1");//返回生成的xml數據

echo ArrayToXML::arrtoxml($data);

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的支付二维码php能实现吗_(实用篇)微信支付扫码支付php版的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。