微信小程序支付PHP代码
本文实例为大家分享了微信小程序支付PHP具体代码,供大家参考,具体内容如下
服务器端获取openid
Getopenid.php
小程序存储openid
在app.js中getUserInfo:function(cb){ varthat=this if(this.globalData.userInfo){ typeofcb=="function"&&cb(this.globalData.userInfo) }else{ wx.login({ success:function(res){ if(res.code){ varcode=res.code; wx.getUserInfo({ success:function(res2){ console.log(res2); that.globalData.userInfo=res2.userInfo; typeofcb=="function"&&cb(that.globalData.userInfo) varencryptedData=encodeURIComponent(res2.encryptedData);//一定要把加密串转成URI编码 variv=res2.iv; //请求自己的服务器 //Login(code,encryptedData,iv); wx.showToast({ title:'正在登录...', icon:'loading', duration:10000 }); //请求服务器 wx.request({ url:API_URL,//Getopenid.php data:{ js_code:code, }, method:'GET', header:{ 'content-type':'application/json' },//设置请求的header success:function(res){ //success wx.hideToast(); console.log("JSON:"+res.data); if(res.data.result=="1"){//获取openid成功 wx.setStorage({//存储openid key:"openid", data:res.data.openid }) }else{ wx.showToast({ title:'openid获取失败', icon:'none', duration:2000 }) } console.log('服务器返回'+res.data.result); console.log('服务器返回'+res.data.msg); console.log('服务器返回'+res.data.openid); }, fail:function(){ //fail //wx.hideToast(); }, complete:function(){ //complete } }) } }) }else{ console.log('获取用户登录态失败!'+res.errMsg) } } }) } }在登陆界面获取openid
varapp=getApp() onLoad:function(){ console.log('onLoad') varthat=this //调用应用实例的方法获取全局数据 app.getUserInfo(function(userInfo){//获取用户信息 //更新数据 that.setData({ userInfo:userInfo }) }) }通过以上步骤已经获取到openid
支付方法小程序
pay(){ varthat=this; if(this.data.totalPrice==0){ return; } wx.getStorage({//获取存储在本地的openid key:'openid', success:function(res){ console.log(res.data) that.setData({ openid:res.data, }) varcarArray=that.data.carArray; varstr=""; for(vari=0;iPay.php
pay(); echojson_encode($return);WeixinPay.php
appid=$appid; $this->openid=$openid; $this->mch_id=$mch_id; $this->key=$key; $this->out_trade_no=$out_trade_no; $this->body=$body; $this->total_fee=$total_fee; } publicfunctionpay(){ //统一下单接口 $return=$this->weixinapp(); return$return; } //统一下单接口 privatefunctionunifiedorder(){ $url='https://api.mch.weixin.qq.com/pay/unifiedorder'; $parameters=array( 'appid'=>$this->appid,//小程序ID 'mch_id'=>$this->mch_id,//商户号 'nonce_str'=>$this->createNoncestr(),//随机字符串 //'body'=>'test',//商品描述 'body'=>$this->body, //'out_trade_no'=>'2015450806125348',//商户订单号 'out_trade_no'=>$this->out_trade_no, //'total_fee'=>floatval(0.01*100),//总金额单位分 'total_fee'=>$this->total_fee, //'spbill_create_ip'=>$_SERVER['REMOTE_ADDR'],//终端IP 'spbill_create_ip'=>'192.168.0.161',//终端IP 'notify_url'=>'http://www.weixin.qq.com/wxpay/pay.php',//通知地址确保外网能正常访问 'openid'=>$this->openid,//用户id 'trade_type'=>'JSAPI'//交易类型 ); //统一下单签名 $parameters['sign']=$this->getSign($parameters); $xmlData=$this->arrayToXml($parameters); $return=$this->xmlToArray($this->postXmlCurl($xmlData,$url,60)); return$return; } privatestaticfunctionpostXmlCurl($xml,$url,$second=30) { $ch=curl_init(); //设置超时 curl_setopt($ch,CURLOPT_TIMEOUT,$second); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);//严格校验 //设置header curl_setopt($ch,CURLOPT_HEADER,FALSE); //要求结果为字符串且输出到屏幕上 curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); //post提交方式 curl_setopt($ch,CURLOPT_POST,TRUE); curl_setopt($ch,CURLOPT_POSTFIELDS,$xml); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,20); curl_setopt($ch,CURLOPT_TIMEOUT,40); set_time_limit(0); //运行curl $data=curl_exec($ch); //返回结果 if($data){ curl_close($ch); return$data; }else{ $error=curl_errno($ch); curl_close($ch); thrownewWxPayException("curl出错,错误码:$error"); } } //数组转换成xml privatefunctionarrayToXml($arr){ $xml=""; foreach($arras$key=>$val){ if(is_array($val)){ $xml.="<".$key.">".arrayToXml($val)."".$key.">"; }else{ $xml.="<".$key.">".$val."".$key.">"; } } $xml.=" "; return$xml; } //xml转换成数组 privatefunctionxmlToArray($xml){ //禁止引用外部xml实体 libxml_disable_entity_loader(true); $xmlstring=simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA); $val=json_decode(json_encode($xmlstring),true); return$val; } //微信小程序接口 privatefunctionweixinapp(){ //统一下单接口 $unifiedorder=$this->unifiedorder(); //print_r($unifiedorder); $parameters=array( 'appId'=>$this->appid,//小程序ID 'timeStamp'=>''.time().'',//时间戳 'nonceStr'=>$this->createNoncestr(),//随机串 'package'=>'prepay_id='.$unifiedorder['prepay_id'],//数据包 'signType'=>'MD5'//签名方式 ); //签名 $parameters['paySign']=$this->getSign($parameters); return$parameters; } //作用:产生随机字符串,不长于32位 privatefunctioncreateNoncestr($length=32){ $chars="abcdefghijklmnopqrstuvwxyz0123456789"; $str=""; for($i=0;$i<$length;$i++){ $str.=substr($chars,mt_rand(0,strlen($chars)-1),1); } return$str; } //作用:生成签名 privatefunctiongetSign($Obj){ foreach($Objas$k=>$v){ $Parameters[$k]=$v; } //签名步骤一:按字典序排序参数 ksort($Parameters); $String=$this->formatBizQueryParaMap($Parameters,false); //签名步骤二:在string后加入KEY $String=$String."&key=".$this->key; //签名步骤三:MD5加密 $String=md5($String); //签名步骤四:所有字符转为大写 $result_=strtoupper($String); return$result_; } ///作用:格式化参数,签名过程需要使用 privatefunctionformatBizQueryParaMap($paraMap,$urlencode){ $buff=""; ksort($paraMap); foreach($paraMapas$k=>$v){ if($urlencode){ $v=urlencode($v); } $buff.=$k."=".$v."&"; } $reqPar; if(strlen($buff)>0){ $reqPar=substr($buff,0,strlen($buff)-1); } return$reqPar; } }以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。