微信支付服務商模式php
① php 微信支付幾種方式
用支付金額綁定支付用戶,監聽到收款金額就能知道哪個用戶支付的,從而達到無需人工處理的效果,也能實現多筆訂單同時處理。點擊查看支付演示,了解個人網站實現微信收款流程。
② php 微信掃碼支付模式一怎麼設置金額
1)打開微信,點擊右下角【我】,選擇錢包,再點擊左上角【轉賬】。
2)點擊【面對面收錢】,然後點擊右上角【設置金額】。
3)輸入金額(最高支持500元),可以點擊【添加收錢說明】進行文字說明,設置好後點擊【確定】。
③ 如何利用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如何實現
你好。關於這個問題:
先進入開發者中心-》網頁授權獲取用戶基本信息-》修改成你的測試域名。否則會出現redirect_uri 參數
微『信』支『付』介面現在也慢慢的像支『付』寶一個可以利用api介面來實現第3方網|站(pigcms)或應用進行支付了。
希望我的回答對您有用,望採納~
⑤ 微信支付服務商申請怎麼弄
微信支付服務商申請條件:
1、 微信認證的企業類型服務號,微信支付服務商目前只面對企業認證的服務號才能開發申請。
2、 申請資料
A、 公司聯系方式:包含聯系人姓名、聯系電話和聯系郵箱
B、 客服電話
C、 公司對公賬戶信息:包含開戶行省市信息,開戶賬號
微信支付商戶平台申請步驟:
一、 資料填寫
1、
登錄微信支付服務商平台(MP),網址為https://pay.weixin.qq.com/index.php/partner/public/home。點擊「微信支付」,然後「服務商申請」
2、 按照頁面的指引,填寫申請資料
3、 資料提交後,將等待審核,同時微信支付會向填寫的對公賬戶打一筆金額隨機的驗證款。
如果資料審核通過,則進行下一步賬戶驗證,如果資料沒有審核通過,申請人從新提交資料,可以根據駁回的理由重新修改提交。
二、 賬戶驗證
1、 登錄服務商平台,查收開戶郵件,獲取商戶平台登錄賬號和密碼
2、 登錄商戶平台,網址: https://pay.weixin.qq.com
3、 在商戶平台中,輸入驗證款金額數字,通過商戶身份驗證
通過賬戶驗證後,就進入協議簽約
三、 協議簽約
1、 確認商戶信息無誤後,在線閱覽協議後,簽約
2、 簽約完成後,支付服務商申請流程完成,則服務商功能開放。
⑥ 好心人提供一份微信掃碼支付模式一的PHP或C#源碼
http://www.chenweiweb.com/?p=78你可以在這里去下載到PHP版本的。
⑦ 如何用PHP實現微信支付,求教。新手!說明詳細點
微信公眾號JSAPI支付
一:配置參數
申請成功後,獲取介面文件, 將所有文件放入項目根目錄weixin下,在WxPay.ub.config.php中填入配置賬戶信息;
二:設置授權
開發者中心->網頁服務->網頁授權獲取用戶基本信息->修改;
「授權回調頁面域名修改成你的域名地址即可,須保證網頁授權已獲得,不然會報redirect_uri 參數錯誤;
三:網頁授權獲取用戶openid
js_api_call.php 請求文件中改動(所有傳給微信的參數都在入口文件中接收)
$out_trade_no = $_GET['out_trade_no']; //商戶系統內部訂單號 32個字元內
$total_fee = $_GET['total_fee']*100; //訂單總金額 單位為分,不能帶小數點,所以須把價格乘以100,
不然獲取prepay_id時會報錯誤(設置金額欄位時最好設為小數點後2位)
$pay_status = get_pay_status($out_trade_no);//查看訂單支付狀態
$return_url = get_return_url($out_trade_no); //設置支付成功後跳轉頁面
//使用jsapi介面
$jsApi = new JsApi_pub();
//通過code獲得openid
if (!isset($_GET['code'])) { //觸發微信返回code碼
//設置redirect_uri參數,返回code碼地址,其實就是重定向到當前頁面,獲取用戶code碼參數
$url = WxPayConf_pub::JS_API_CALL_URL."?showwxpaytitle=1&out_trade_no=$out_trade_no&total_fee=$total_fee";
$url = $jsApi->createOauthUrlForCode($url);
Header("Location: $url");
}else{ //獲取code碼,以獲取openid
$code = $_GET['code'];
$jsApi->setCode($code);
$openid = $jsApi->getOpenId(); //用戶標識
}
再就是WxPayHubHelper.php文件 JsApi_pub()類下createOauthUrlForCode($redirectUrl)方法, 第二個參數
改為 $urlObj["redirect_uri"] = urlencode($redirectUrl); //對$url變數進行url編碼 不然header重定向時無法獲取訂單號和金額
四:設置統一支付介面參數,獲取prepay_id (預支付ID 微信生成的預支付 ID,用於後續介面調用中使用)
微信支付->開發配置->支付測試->測試授權目錄和測試白名單添加
(支付授權目錄需要精確到最細一級的目錄,且在使用時,目錄名稱後直接加文件名,如ccc.com/weixin/)
確保你 WxPayPubHelper.php文件里 UnifiedOrder_pub 這個類的getPrepayId這個方法能正常使用
這一步的調試在 getPrepayId()內 var_mp($this->result); 就能看到錯誤代碼;
posXml這個方法後調用了createXml這個方法
function postXml() {
$xml = $this->createXml();
//**在此處查看xml文件是否正常生成
include_once("log_.php");
$log = new Log_();
$log->log_result("log.txt",$xml);
//** 由於列印一些xml格式的文件只顯示字元長度,不顯示內容。於是用log的形式寫在伺服器上調試
$this->response = $this->postXmlCurl($xml,$this->url,$this->curl_timeout);
return $this->response;
}
保證xml這個變數格式如下;
<xml><openid><![CDATA[UKqsyD_711nkk2c]]></openid>
<body><![CDATA[pay]]</body>
<out_trade_no>201504101658571802></out_trade_no>
<total_fee>120</total_fee>
<notify_url><![CDATA[http://www.hao123.com/weixin/notify_url.php]]></notify_url>
<trade_type><![CDATA[JSAPI]]></trade_type>
<appid><![CDATA[wxfd3c4asdf]]></appid>
<mch_id>123334333102</mch_id>
<spbill_create_ip><![CDATA[192.168.0.1]]></spbill_create_ip>
<nonce_str><![CDATA[imsdasdcmlkhfa]]></nonce_str>
<sign><![CDATA[CBE62F36806A3E1]]></sign></xml>
參數正確,postXmlCurl才能正確提交,提交後就能得到正確的prepay_id,就能彈出支付框了
五:使用jsapi調起支付
根據prepay_id生成jsapi支付參數
$jsApi->setPrepayId($prepay_id);
$jsApiParameters = $jsApi->getParameters();
//調用微信JS api 支付
function jsApiCall() {
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
<?php echo $jsApiParameters; ?>,
function(res){
WeixinJSBridge.log(res.err_msg);
if(res.err_msg == "get_brand_wcpay_request:ok") { //支付成功後
window.location.href="<?php echo $return_url;?>" //跳轉地址及訂單操作,在非同步頁面也須處理訂單,防止同步時失敗
}else{
alert("支付失敗"+res.err_code+res.err_desc+res.err_msg);
}
}
);
}(每次請求callpay方法時須判斷訂單狀態,防止重復提交)
六:通用通知介面 非同步處理微信返回結果
支付完成後,notify.php中獲取微信的回調
$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
//須驗證簽名,並回應微信。
if($notify->checkSign() == TRUE) //簽名驗證通過並更新訂單狀態後
$notify->setReturnParameter("return_code","SUCCESS"); //設置返回碼,保證支付狀態改變後才返回成功
//對後台通知交互時,如果微信收到商戶的應答不是成功或超時,微信認為通知失敗,
//微信會通過一定的策略(如30分鍾共8次)定期重新發起通知,
$returnXml = $notify->returnXml();
echo $returnXml;(將xml數據返回微信 當return_code為SUCCESS時,不會再通知)
//當收到通知進行處理時,首先檢查對應業務數據的狀態,判斷該通知是否已經處理過,如果沒有處理過再進行處理,
如果處理過直接返回結果成功。在對業務數據進行狀態檢查和處理之前,要採用數據鎖進行並發控制,
以避免函數重入造成的數據混亂.
//判斷是否在微信瀏覽器打開
function isWeiXin(){
var ua = window.navigator.userAgent.toLowerCase();
if(ua.match(/MicroMessenger/i) == 'micromessenger'){
return true;
}else{
return false;
}
}
步驟夠詳細了吧,我自己實現過,所以寫了日誌,結合php版本的demo 大致弄得出來了,如果對整個流程不太清楚,仔細的看完微信公眾號支付介面文檔,你申請微信公眾號支付成功了就會有的,
⑧ 微信支付php服務端如何集成,是用微信支付的v3版本的demo嗎
對。基本上參考它就可以了。
⑨ 微信支付的二維碼怎麼生成php
開通線下掃碼支付即可實現。
解決方案:
1、首先服務號必須先完成認證。
2、然後在申請開通微信支付。
3、啟動設計和開發,支付介面已可以在開發環境下調用調試。
場景介紹:
用戶掃描商戶展示在各種場景的二維碼進行支付。
步驟1:商戶根據微信支付的規則,為不同商品生成不同的二維碼,展示在各種場景,用於用戶掃描購買。