微信小程序 支付功能实现PHP实例详解
程序员文章站
2022-06-20 08:04:28
微信小程序 支付功能实现php实例详解
前端代码:
wx.request({
url: 'https://www.yourhost.com/weix...
微信小程序 支付功能实现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) } });
后端代码:
//支付费用 public function payjoinfee(){ $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'); }
微信支付类
<?php /* * 小程序微信支付 */ class weixinpay{ protected $appid; protected $mch_id; protected $key; protected $openid; function __construct($appid,$openid,$mch_id,$key){ $this->appid=$appid; $this->openid=$openid; $this->mch_id=$mch_id; $this->key=$key; } public function pay(){ //统一下单接口 $return=$this->weixinapp(); return $return; } //统一下单接口 private function unifiedorder(){ $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; } //微信小程序接口 private function weixinapp(){ //统一下单接口 $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位 private function createnoncestr($length = 32 ){ $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; $str =""; for ( $i = 0; $i < $length; $i++ ) { $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1); } return $str; } //作用:生成签名 private function getsign($obj){ foreach ($obj as $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_; } ///作用:格式化参数,签名过程需要使用 private function formatbizqueryparamap($paramap, $urlencode){ $buff = ""; ksort($paramap); foreach ($paramap as $k => $v){ if($urlencode) { $v = urlencode($v); } $buff .= $k . "=" . $v . "&"; } $reqpar; if (strlen($buff) > 0){ $reqpar = substr($buff, 0, strlen($buff)-1); } return $reqpar; } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!