微信公眾號支付(tp5)
阿新 • • 發佈:2018-11-06
微信公眾號支付
微信下載的sdk包appid和secret...配置項是放在了配置檔案裡。但在實際運用中你要用到多個賬戶進行測試,每次都要對配置檔案進行更改。為了避免多人使用衝突的實現在這裡對微信官方給的sdk中的統一下單&&獲取openid進行了更改,可重複調取使用。
更改後skd github存放地址( https://github.com/linhue/wxpayment )
使用方法 引入Wxpayments.php服務類檔案:
<?php namespace app\admin\controller; use think\Controller; use wxpayment\JsApiPay; use wxpayment\WxPayments; class Index extends Controller { $WxPayment = new WxPayments(); //第一步 -> 此步驟為配置引數方法必須放在其他操作之前(儲存在WxPaymentData物件中) sdk中的WxPayConfig.php丟棄使用由此方法代替設定需要使用的引數 //獲取openid只需要設定 app_id && app_secret //支付需要設定 app_id && mch_id && key $WxPayment->setPayConfig(['app_id'=>'**','mch_id'=>**,'app_secret'=>'**','key'=>'**']); //第二步-> 此處為繼續使用JsApiPay.php調取三方登陸獲取code然後獲取openid,內部使用的引數調取的是WxPaymentData物件中引數 $info = (new JsApiPay())->GetOpenid('htttps://www.***.com/admin/index/index');//此處為三方授權登陸回撥地址 $openid = $info['openid']; //第三步 調取微信 統一下單介面 $data所包含 //必選 :: openid(支付使用者的openid) notify_url(支付成功通知地址) total_fee(支付金額) //非必選 :: body(標題) attach(詳情) time_start(開始時間) goods_tag trade_type(公眾號網頁支付預設為 JSAPI) $order = $WxPayment->payments($data); //第四步 生成paysign 傳給前端調取支付頁面。 $paysign = $WxPayment->getPaySign($order); } }
(請根據實際情況,合理安排各個步驟)
以下是 WxPayments 服務類容程式碼。
<?php namespace wxpayment; use wxpayment\WxPayApi; use wxpayment\WxPayUnifiedOrder; use wxpayment\JsApiPay; use wxpayment\WxPaymentData; /** *支付請求微信下單 * *微信公眾號支付。 * @author linhu<[email protected]> * @version $Id$ * @since 1.0 */ final class WxPayments { /** * 生成訂單資訊 * (JSAPI)所需引數 * 必選 :: openid(支付使用者的openid) notify_url(支付成功通知地址) total_fee(支付金額) * 非必選 :: body(標題) attach(詳情) time_start(開始時間) goods_tag trade_type(公眾號網頁支付預設為 JSAPI) * return array 統一下單的資訊 *(WEB)所需引數 * 必選 :: trade_type=>MWEB * return prepay_id(*) 微信預支付標識 * * @access public * @param array $arr 使用者資料 * @return object 返回型別 */ public function payments($payinfo=[]) { $input = new WxPayUnifiedOrder(); //設定支付標題 $body = !empty($payinfo['body'])?$payinfo['body']:'test'; $input->SetBody($body); $attach = !empty($payinfo['attach'])?$payinfo['attach']:'test'; $input->SetAttach($attach); $input->SetOut_trade_no(WxPaymentData::getMchid().date("YmdHis")); //設定支付金額 以分為單位 所以此處需要*100 $input->SetTotal_fee($payinfo['total_fee']*100); //支付發起時間 $time_start = !empty($payinfo['time_start'])?$payinfo['time_start']:date('YmdHis'); $input->SetTime_start($time_start); $input->SetTime_expire(date("YmdHis", time() + 6000)); //支付發起時間 $goods_tag = !empty($payinfo['goods_tag'])?$payinfo['goods_tag']:'支付'; $input->SetGoods_tag($goods_tag); //設定支付回撥通知url $notify_url = !empty($payinfo['notify_url'])?$payinfo['notify_url']:''; $input->SetNotify_url($payinfo['notify_url']); $trade_type = !empty($payinfo['trade_type'])?$payinfo['trade_type']:'JSAPI'; $input->SetTrade_type($trade_type); //設定支付使用者open_id $openid = !empty($payinfo['openid'])?$payinfo['openid']:''; $input->SetOpenid($openid); // var_dump($input);die; //請求微信生成訂單資訊 $order = WxPayApi::unifiedOrder($input); return $order; } /** * 設定引數 app_id app_secret mch_id * * @access public * @param array $arr 使用者資料 * @return array 返回型別 */ public function setPayConfig( $PayConfig=[]) { if(!array_key_exists('app_id',$PayConfig) or !array_key_exists('app_secret',$PayConfig) or !array_key_exists('mch_id',$PayConfig)){ return false; } $inputObj = new WxPaymentData(); WxPaymentData::setAppid($PayConfig['app_id']); WxPaymentData::setSecret($PayConfig['app_secret']); WxPaymentData::setMchid($PayConfig['mch_id']); WxPaymentData::setMchkey($PayConfig['key']); return true; } /** * 拼接paysign * * @access public * @param array $arr 使用者資料 * @return string 返回型別 */ public function getPaySign($order=[]) { return (new JsApiPay())->GetJsApiParameters($order); } /** * 下載今日賬單 * bill_date:賬單日期格式為: date('Ymd') * bill_type:(ALL||SUCCESS||REFUND||RECHARGE_REFUND) 預設為ALL * @access public * @param array $data * @return string */ public function download( array $data=null){ $inputObj = new WxPaymentData(); // var_dump($inputObj);die; $inputObj->bill_date = !empty($data['bill_date'])?$data['bill_type']:date('Ymd'); $inputObj->bill_type = !empty($data['bill_type'])?$data['bill_type']:'ALL'; return WxPayApi::downloadBill($inputObj); } public function qrBizpayurl(){ return WxPayApi::bizpayurl(); } /** * web第三方只方支付 * * 必選:: prepay_id * 非必選:: trade_type mweb_url * 必選-非必選 只限當前方法 * @access public * @param array $data * @return jump_web */ public function jumpWebUrl($data=[]){ if(!array_key_exists('prepay_id',$data)){ return false; } $mweb_url = !empty($data['mweb_url'])?'&mweb_url'.$data['mweb_url']:''; $trade_type = !empty($data['trade_type'])?'&trade_type='.$data['trade_type']:'&trade_type=MWEB'; $url = 'https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?'.$mweb_url.$trade_type; Header('location:'.$url);exit; } }