小程式怎麼實現微信支付
小程式實作微信支付的方法:
前期準備:
1.開通了微信支付,並且小程式綁定了微信支付;
2.準備好小程式的appid,微信支付的商家號,支付秘鑰。
商家系統與微信支付系統主要互動:
1、小程式內呼叫登入接口,取得到使用者的openid
2、呼叫商家伺服器支付統一下單接口,進行預付
/** * 预支付请求接口(POST) * @param string $openid openid * @param string $body 商品简单描述 * @param string $order_sn 订单编号 * @param string $total_fee 金额 * @return json的数据 */ public function prepay(){ $config = $this->config; $openid = I('post.openid'); $body = I('post.body'); $order_sn = I('post.order_sn'); $total_fee = I('post.total_fee'); //统一下单参数构造 $unifiedorder = array( 'appid' => $config['appid'], 'mch_id' => $config['pay_mchid'], 'nonce_str' => self::getNonceStr(), 'body' => $body, 'out_trade_no' => $order_sn, 'total_fee' => $total_fee * 100, 'spbill_create_ip' => get_client_ip(), 'notify_url' => 'https://'.$_SERVER['HTTP_HOST'].'/Api/Wxpay/notify', 'trade_type' => 'JSAPI', 'openid' => $openid ); $unifiedorder['sign'] = self::makeSign($unifiedorder); //请求数据 $xmldata = self::array2xml($unifiedorder); $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder'; $res = self::curl_post_ssl($url, $xmldata); if(!$res){ self::return_err("Can't connect the server"); } // 这句file_put_contents是用来查看服务器返回的结果 测试完可以删除了 //file_put_contents(APP_ROOT.'/Statics/log1.txt',$res,FILE_APPEND); $content = self::xml2array($res); if(strval($content['result_code']) == 'FAIL'){ self::return_err(strval($content['err_code_des'])); } if(strval($content['return_code']) == 'FAIL'){ self::return_err(strval($content['return_msg'])); } self::return_data(array('data'=>$content)); //$this->ajaxReturn($content); }
3、調用商家伺服器再次簽名接口,返回支付資料
/** * 进行支付接口(POST) * @param string $prepay_id 预支付ID(调用prepay()方法之后的返回数据中获取) * @return json的数据 */ public function pay(){ $config = $this->config; $prepay_id = I('post.prepay_id'); $data = array( 'appId' => $config['appid'], 'timeStamp' => time(), 'nonceStr' => self::getNonceStr(), 'package' => 'prepay_id='.$prepay_id, 'signType' => 'MD5' ); $data['paySign'] = self::makeSign($data); $this->ajaxReturn($data); }
4、小程式內完成支付,商家伺服器接收支付回呼通知
#小程式端程式碼:
wx.requestPayment({ 'timeStamp': '', 'nonceStr': '', 'package': '', 'signType': 'MD5', 'paySign': '', 'success':function(res){ }, 'fail':function(res){ } })
伺服器回呼通知:
//微信支付回调验证 public function notify(){ $xml = $GLOBALS['HTTP_RAW_POST_DATA']; // 这句file_put_contents是用来查看服务器返回的XML数据 测试完可以删除了 //file_put_contents(APP_ROOT.'/Statics/log2.txt',$res,FILE_APPEND); //将服务器返回的XML数据转化为数组 $data = self::xml2array($xml); // 保存微信服务器返回的签名sign $data_sign = $data['sign']; // sign不参与签名算法 unset($data['sign']); $sign = self::makeSign($data); // 判断签名是否正确 判断支付状态 if ( ($sign===$data_sign) && ($data['return_code']=='SUCCESS') && ($data['result_code']=='SUCCESS') ) { $result = $data; //获取服务器返回的数据 $order_sn = $data['out_trade_no']; //订单单号 $openid = $data['openid']; //付款人openID $total_fee = $data['total_fee']; //付款金额 $transaction_id = $data['transaction_id']; //微信支付流水号 //更新数据库 $this->updateDB($order_sn,$openid,$total_fee,$transaction_id); }else{ $result = false; } // 返回状态给微信服务器 if ($result) { $str='<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>'; }else{ $str='<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[签名失败]]></return_msg></xml>'; } echo $str; return $result; }
小程式端完整程式碼如下:
/** * 支付函数 * @param {[type]} _payInfo [description] * @return {[type]} [description] */ pay:function(_payInfo,success,fail){ var payInfo = { body:'', total_fee:0, order_sn:'' } Object.assign(payInfo, _payInfo); if(payInfo.body.length==0){ wx.showToast({ title:'支付信息描述错误' }) return false; } if(payInfo.total_fee==0){ wx.showToast({ title:'支付金额不能0' }) return false; } if(payInfo.order_sn.length==0){ wx.showToast({ title:'订单号不能为空' }) return false; } var This = this; This.getOpenid(function(openid){ payInfo.openid=openid; This.request({ url:'api/pay/prepay', data:payInfo, success:function(res){ var data = res.data; console.log(data); if(!data.status){ wx.showToast({ title:data['errmsg'] }) return false; } This.request({ url:'api/pay/pay', data:{prepay_id:data.data.data.prepay_id}, success:function(_payResult){ var payResult = _payResult.data; console.log(payResult); wx.requestPayment({ 'timeStamp': payResult.timeStamp.toString(), 'nonceStr': payResult.nonceStr, 'package': payResult.package, 'signType': payResult.signType, 'paySign': payResult.paySign, 'success': function (succ) { success&&success(succ); }, 'fail': function (err) { fail&&fail(err); }, 'complete': function (comp) { } }) } }) } }) }) }
建議:《小程式開發教學課程》
以上是小程式怎麼實現微信支付的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

隨著行動互聯網技術和智慧型手機的普及,微信成為了人們生活中不可或缺的一個應用。而微信小程式則讓人們可以在不需要下載安裝應用程式的情況下,直接使用小程式來解決一些簡單的需求。本文將介紹如何使用Python來開發微信小程式。一、準備工作在使用Python開發微信小程式之前,需要先安裝相關的Python函式庫。這裡推薦使用wxpy和itchat這兩個函式庫。 wxpy是一個微信機器

小程式能用react,其使用方法:1、基於「react-reconciler」實作一個渲染器,產生一個DSL;2、建立一個小程式元件,去解析和渲染DSL;3、安裝npm,並執行開發者工具中的建構npm;4、在自己的頁面中引入包,再利用api即可完成開發。

實作微信小程式中的卡片翻轉特效在微信小程式中,實現卡片翻轉特效是一種常見的動畫效果,可以提升使用者體驗和介面互動的吸引力。以下將具體介紹如何在微信小程式中實現卡片翻轉的特效,並提供相關程式碼範例。首先,需要在小程式的頁面佈局檔案中定義兩個卡片元素,一個用於顯示正面內容,一個用於顯示背面內容,具體範例程式碼如下:<!--index.wxml-->&l

本站10月31日消息,今年5月27日,螞蟻集團宣布啟動“漢字拾光計劃”,最近又迎來新進展:支付寶上線“漢字拾光-生僻字”小程序,用於向社會徵集生僻字,補充生僻字庫,同時提供不同的生僻字輸入體驗,以幫助完善支付寶內的生僻字輸入方法。目前,用戶搜尋「漢字拾光」、「生僻字」等關鍵字就可以進入「生僻字」小程式。在小程式裡,使用者可以提交尚未被系統辨識輸入的生僻字圖片,支付寶工程師確認後,將會對字庫進行補錄入。本站注意到,使用者也可以在小程式體驗最新的拆字輸入法,這項輸入法針對讀音不明確的生僻字設計。用戶拆

uniapp如何實現小程式和H5的快速轉換,需要具體程式碼範例近年來,隨著行動網路的發展和智慧型手機的普及,小程式和H5成為了不可或缺的應用形式。而uniapp作為一個跨平台的開發框架,可以在一套程式碼的基礎上,快速實現小程式和H5的轉換,大大提高了開發效率。本文將介紹uniapp如何實現小程式和H5的快速轉換,並給出具體的程式碼範例。一、uniapp簡介unia

實現思路x01服務端的建立首先,在服務端,使用socket進行訊息的接受,每接受一個socket的請求,就開啟一個新的線程來管理訊息的分發與接受,同時,又存在一個handler來管理所有的線程,從而實現對聊天室的各種功能的處理x02客戶端的建立客戶端的建立就要比服務端簡單多了,客戶端的作用只是對消息的發送以及接受,以及按照特定的規則去輸入特定的字符從而實現不同的功能的使用,因此,在客戶端這裡,只需要去使用兩個線程,一個是專門用於接受消息,一個是專門用於發送消息的至於為什麼不用一個呢,那是因為,只

小程序備案操作步驟:1、準備個人身分證影本、企業營業執照影本、法人身分證影本等備案資料;2、登入小程式管理後台;3、進入小程式設定頁;4、選擇“基本設定」;5、填寫備案資料;6、上傳備案資料;7、提交備案申請;8、等待審核結果,如果備案不透過要根據原因進行修改,並重新提交備案申請;9、備案後續操作即可。

1.開啟微信小程序,進入對應的小程式頁面。 2.在小程式頁面中尋找會員相關入口,通常會員入口在底部導覽列或個人中心等位置。 3.點選會員入口,進入會員申請頁。 4、在會員申請頁面,填寫相關信息,如手機號碼、姓名等,完成資料填寫後,提交申請。 5.小程式方會對會員申請審核,審核通過後,用戶即可成為微信小程式會員。 6.作為會員,用戶將享有更多的會員權益,如積分、優惠券、會員專屬活動等
