微信小程序支付,php后臺對接完整代碼,全是干貨呀,拿過來可以直接使用。小程序在調起微信支付之前需要5個參數,這時候就需要攜帶code向后臺請求,然后后臺根據code獲取openid 再進行服務器之間的。
一、準備工作
1、小程序注冊,要以公司的以身份去注冊一個小程序,才有微信支付權限;
2、綁定商戶號。
3、在小程序填寫合法域
二、完成以上條件,你可以得到
小程序appid 小程序秘鑰 這兩個用于獲取用戶openid;
商戶號id ,商戶號秘鑰 支付接口必須的;
三、開始開發
前臺代碼
調起微信支付 @param 支付價格,不填寫默認為1分錢 function pay(total_fee) { var total_fee = total_fee; wx.login({ success: res = { //code 用于獲取openID的條件之一 var code = res.code; wx.request({ url: 后臺地址/index.php , method: POST , data: { total_fee:total_fee, code: code, header: { content-type : application/x-www-form-urlencoded // 默認值 success: function (res) { //后端返回的數據 var data = res.data; console.log(data); console.log(data[ timeStamp ]); wx.requestPayment({ timeStamp: data[ timeStamp ], nonceStr: data[ nonceStr ], package: data[ package ], signType: data[ signType ], paySign: data[ paySign ], success: function (res) { wx.showModal({ title: 支付成功 , content: , fail: function (res) { console.log(res); });
}
以下是PHP后臺代碼 ,這里用的是tp框架
?php namespace Home/Controller; use Think/Controller; class PayController extends Controller { /** * [callback 微信支付回調處理] * @Author zhengmingzhou * @DateTime 2018-05-22 * @return function [description] public function callback(){ vendor( Wechart.WxPay.Api vendor( Wechart.NativePay vendor( Wechart.WxPay.Data vendor( Wechart.WxPay.Notify
$result = $WxPayData- FromXml($xml); if($result[ return_code ] == SUCCESS $result[ result_code ] == SUCCESS ){ //回調邏輯處理。。。
$WX_SECRET = //AppSecret $url = https://api.weixin.qq.com/sns/jscode2session?appid= . $WX_APPID . secret= . $WX_SECRET . js_code= . $code . grant_type=authorization_code $infos = json_decode(file_get_contents($url)); $openid = $infos- openid; if(I( post.total_fee )) $total_fee=I( post.total_fee else $total_fee=0.01; $fee = 0.01;//舉例充值0.01 $appid = //appid $body = 標題 $mch_id = //商戶號 $nonce_str = $this- nonce_str();//隨機字符串 $notify_url = //回調的url【自己填寫】 $openid = $openid; $out_trade_no = $this- order_number();//商戶訂單號 $spbill_create_ip = //服務器的ip【自己填寫】; $total_fee = $fee*100;//這里需要*100 $trade_type = JSAPI //交易類型 默認
//這里是按照順序的 因為下面的簽名是按照順序 排序錯誤 肯定出錯 $post[ appid ] = $appid; $post[ body ] = $body; $post[ mch_id ] = $mch_id; $post[ nonce_str ] = $nonce_str;//隨機字符串 $post[ notify_url ] = $notify_url; $post[ openid ] = $openid; $post[ out_trade_no ] = $out_trade_no; $post[ spbill_create_ip ] = $spbill_create_ip;//終端的ip $post[ total_fee ] = $total_fee;//總金額 $post[ trade_type ] = $trade_type; $sign = $this- sign($post);//簽名 $post_xml = xml appid .$appid. /appid body .$body. /body mch_id .$mch_id. /mch_id nonce_str .$nonce_str. /nonce_str notify_url .$notify_url. /notify_url openid .$openid. /openid out_trade_no .$out_trade_no. /out_trade_no spbill_create_ip .$spbill_create_ip. /spbill_create_ip total_fee .$total_fee. /total_fee trade_type .$trade_type. /trade_type sign .$sign. /sign /xml
$url = https://api.mch.weixin.qq.com/pay/unifiedorder $xml = $this- http_request($url,$post_xml); $array = $this- xml($xml);//全要大寫
//print_r($array); if($array[ RETURN_CODE ] == SUCCESS $array[ RESULT_CODE ] == SUCCESS ){ $time = time(); $tmp= //臨時數組用于簽名 $tmp[ appId ] = $appid; $tmp[ nonceStr ] = $nonce_str; $tmp[ package ] = prepay_id= .$array[ PREPAY_ID $tmp[ signType ] = MD5 $tmp[ timeStamp ] = $time
$data[ nonceStr ] = $nonce_str;//隨機字符串 $data[ signType ] = MD5 //簽名算法,暫支持 MD5 $data[ package ] = prepay_id= .$array[ PREPAY_ID //統一下單接口返回的 prepay_id 參數值,提交格式如:prepay_id=* $data[ paySign ] = $this- sign($tmp);//簽名,具體簽名方案參見微信公眾號支付幫助文檔; $data[ out_trade_no ] = $out_trade_no;
private function order_number($openid){ //date( Ymd ,time()).time().rand(10,99);//18位 return md5($openid.time().rand(10,99));//32位
$wx_key = //申請支付后有給予一個商戶賬號和密碼,登陸后自己設置的key $stringSignTemp = $stringA. key= .$wx_key; return strtoupper(md5($stringSignTemp));
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
}
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !
相關推薦:
在php中用html_entity_decode實現HTML實體轉義
以上就是微信小程序支付功能用php進行后臺對接的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答