這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 微信支付介紹 微信公眾號程式或微信小程式項目中基本都要有微信支付。支付場景基本就是點擊支付,然後手機底部拉起輸入微信支付密碼彈窗,密碼輸入正確後,支付完成。但是無論是微信小程式或微信公眾號程式都是在後端調用微信api介面進行統一下單,將接 ...
這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助
微信支付介紹
微信公眾號程式或微信小程式項目中基本都要有微信支付。支付場景基本就是點擊支付,然後手機底部拉起輸入微信支付密碼彈窗,密碼輸入正確後,支付完成。但是無論是微信小程式或微信公眾號程式都是在後端調用微信api介面進行統一下單,將介面返回數據回傳前端拉起支付操作,然後非同步通知支付結果的這樣一個流程。
微信公眾號程式接入支付
如果是微信公眾號程式接入微信支付,需要登錄微信公眾號,點擊廣告與服務 – 微信支付關聯一下註冊好的微信商戶平臺(此處一般都是客戶自己完成,不介紹。也就是說只有關聯過的微信商戶才能在公眾號中拉起支付。
然後點擊設置與開發 – 基本配置 ,拿到公眾號的appid和appsecret(開發密鑰)。
微信小程式接入支付
如果是微信小程式程式接入微信支付,登錄微信小程式,點擊功能 – 微信支付,關聯一下註冊好的微信商戶平臺(此處一般都是客戶自己完成,不介紹。也就是說只有關聯過的微信商戶才能在小程式中拉起支付。
然後點擊開發 – 開發管理 – 開發設置,拿到小程式的appid和appsecret(開發密鑰)。
微信商戶平臺配置
第一步
登錄微信商戶平臺,點擊賬戶中心 – API安全,設置一下證書和兩個密鑰(此處兩個密鑰設置為相同的)。相關配置操作根據提示一步一步走流程就行的。【一般要用到操作密碼、多個簡訊驗證碼】
配置成功後,要拿到3個證書文件和一個自己輸入進去的密鑰,務必保存並記錄下來。程式中會用到。拿到證書文件如下:
第二步
點擊產品中心 – 我的產品 ,點擊申請JSAPI支付。
開發配置中需要填寫支付授權目錄,此處填寫後端伺服器功能變數名稱即可。
後端程式
後端開發由於編程語言不同,此處以PHP開發為例。介紹一下統一下單介面和退款介面的調用;首先要下載一下官方提供的SDK引入項目中。然後將之前獲取到的證書文件也放入程式目錄中。由於各個版本SDK不同,此處只記錄自己用的配置流程(不喜勿噴)。
如果需要我這版SDK,QQ:321824916
統一下單介面
官方有介面文檔,具體介面參數不做介紹,自己看吧。另外由於SDK版本不同,不保證下麵的代碼可以無縫銜接其他SDK包直接使用。下麵上代碼;
//引入擴展 import('JsPayWechat.lib.WxPayApi', 'vendor'); import('JsPayWechat.example.WxPayJsApiPay', 'vendor'); $tools = new \JsApiPay(); $input = new \WxPayUnifiedOrder(); //設置支付描述 $input->SetBody("********"); //內部訂單號(我們系統中自己生成的訂單號) $input->SetOut_trade_no($tid); //訂單金額,由於單位是分,而我的是元,故乘了100 $price = $price * 100; $input->SetTotal_fee("" . ($price)); $input->SetTime_start(date("YmdHis")); $input->SetTime_expire(date("YmdHis", time() + 600)); //支付結果通知地址,寫支付結果邏輯的訪問鏈接 $notifyUrl = zUrl('Other/dealLevelOrder'); $input->SetNotify_url($notifyUrl); $input->SetTrade_type("JSAPI"); //拉起支付用戶的open_id $input->SetOpenid($open_id); $order = \WxPayApi::unifiedOrder($input); $jsApiParameters = $tools->GetJsApiParameters($order); $jsApiParameters = json_decode($jsApiParameters, true); // 將$jsApiParameters內容返回前端頁面即可。
微信公眾號拉起支付前端處理
//介面返回的下單成功數據 var jsApiParameters = result.jsApiParameters; //跳轉微信支付頁面 wx.chooseWXPay({ timestamp: jsApiParameters.timeStamp, nonceStr: jsApiParameters.nonceStr, package: jsApiParameters.package, signType: jsApiParameters.signType, paySign: jsApiParameters.paySign, success: function (res) { //微信支付成功回調 } });
微信小程式拉起支付前端處理
//介面返回的下單成功數據 let resultdata = res.data.jsApiParameters; //拉起微信支付 wx.requestPayment({ //成功之後,調用小程式微信支付 'timeStamp': resultdata.timeStamp, 'nonceStr': resultdata.nonceStr, 'package': resultdata.package, 'signType': 'MD5', 'paySign': resultdata.paySign, success: function (res) { //支付成功的回調 }, })
退款介面
//拉起微信退款申請 $re_tid = 'RE' . time() . Zrand(6); import('JsPayWechat.lib.WxPayApi', 'vendor'); import('JsPayWechat.example.WxPayJsApiPay', 'vendor'); $input = new \WxPayRefund(); $input->SetOut_trade_no($shopBondOrderInfo['tid']); //原訂單號 $input->SetTransaction_id($shopBondOrderInfo['transaction_id']); //原訂單號 $input->SetOut_refund_no($re_tid); //退款訂單號 $input->SetTotal_fee($shopBondOrderInfo['price'] * 100); //訂單金額 $input->SetRefund_fee($shopBondOrderInfo['price'] * 100); //退款金額 $input->SetOp_user_id(\WxPayConfig::MCHID); if ($result['result_code'] == "SUCCESS") { //退款成功處理 }