小程式微信支付
阿新 • • 發佈:2021-11-10
實現前佈置
1:下載官方微信支付SDK(‘https://pay.weixin.qq.com/wiki/doc/api/index.html’)
2:引入開發框架(我寫的是微信小程式支付)
話不多說直接上程式碼
3:控制器方法
public function getPayOrder(){
try{
$tools = new \JsApiPay();
// $openId = $tools->GetOpenid();
$openId = $open_id;
//②、統一下單
$input = new \WxPayUnifiedOrder();
$input->SetBody("");
$input->SetAttach("");
$input->SetOut_trade_no("");
$input->SetTotal_fee("");
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("");
$input->SetNotify_url("你的回撥方法");
$input->SetTrade_type("JSAPI");
$input->SetOpenid("");
$config = new \WxPayConfig();
$order = \WxPayApi::unifiedOrder($config, $input);
$printf_info = $this->printf_info($order);
$jsApiParameters = $tools->GetJsApiParameters($order);
return $jsApiParameters;
} catch(Exception $e) {
\Log::ERROR(json_encode($e));
}
}
不清除的引數可以檢視SDJ的原始碼
4:回撥方法
public function index(Request $request)
{
//可以先檢視日誌
// file_put_contents('notify.txt', "----------------------------------------\r\n", FILE_APPEND);
// $data = file_get_contents('php://input');
// file_put_contents('notify.txt', '收到非同步通知:' . json_encode($data) . "\r\n", FILE_APPEND);
$testxml = file_get_contents("php://input");
$jsonxml = json_encode(simplexml_load_string($testxml, 'SimpleXMLElement', LIBXML_NOCDATA));
$result = json_decode($jsonxml, true);//轉成陣列,
//如果成功返回了
if($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){
//告訴微信伺服器,我已經接收到成功的通知了,你不要再發送了
echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
//處理自己的業務邏輯
}
}
5:微信小程式程式碼wx.request({ url:'請求的地址', data:product, method:'POST', success:res=>{ wx.hideLoading() vardata=res.data; wx.requestPayment({ nonceStr:data.nonceStr, package:data.package, paySign:data.paySign, timeStamp:data.timeStamp, signType:data.signType, success(res){ wx.hideLoading() wx.switchTab({ url:'../personal/index/index', }) }, fail(err){ wx.showLoading({ title:'已取消支付', }) wx.hideLoading() wx.switchTab({ url:'../personal/index/index', }) } }) }, fail:res=>{ wx.showToast({ title:'網路異常', icon:'loading', duration:1000 }) } })