微信小程序 支付功能实现PHP实例详解
微信小程序支付功能实现PHP实例详解
前端代码:
wx.request({ url:'https://www.yourhost.com/weixin/WeiActivity/payJoinfee',//改成你自己的链接 header:{ 'Content-Type':'application/x-www-form-urlencoded' }, method:'POST', success:function(res){ console.log(res.data); console.log('调起支付'); wx.requestPayment({ 'timeStamp':res.data.timeStamp, 'nonceStr':res.data.nonceStr, 'package':res.data.package, 'signType':'MD5', 'paySign':res.data.paySign, 'success':function(res){ console.log('success'); wx.showToast({ title:'支付成功', icon:'success', duration:3000 }); }, 'fail':function(res){ console.log('fail'); }, 'complete':function(res){ console.log('complete'); } }); }, fail:function(res){ console.log(res.data) } });
后端代码:
//支付费用 publicfunctionpayJoinfee(){ $appid='wx888888888'; $openid='oCQwY0Q_pzrQpu8888888'; $mch_id='141388888'; $key='9A0A86888888888'; import('Weixin.Lib.WeixinPay'); $weixinpay=new\WeixinPay($appid,$openid,$mch_id,$key); $return=$weixinpay->pay(); $this->response($return,'json'); }
微信支付类
appid=$appid; $this->openid=$openid; $this->mch_id=$mch_id; $this->key=$key; } 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'=>'测试',//商品描述 'out_trade_no'=>'2015450806125346',//商户订单号 'total_fee'=>floatval(0.01*100),//总金额单位分 'spbill_create_ip'=>$_SERVER['REMOTE_ADDR'],//终端IP 'notify_url'=>'http://www.weixin.qq.com/wxpay/pay.php',//通知地址 'openid'=>$this->openid,//用户id 'trade_type'=>'JSAPI'//交易类型 ); //统一下单签名 $parameters['sign']=$this->getSign($parameters); $xmlData=arrayToXml($parameters); $return=xmlToArray(postXmlSSLCurl($xmlData,$url,60)); return$return; } //微信小程序接口 privatefunctionweixinapp(){ //统一下单接口 $unifiedorder=$this->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; } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!