微信扫码支付零云插件版实例详解
微信扫码支付零云插件版实例详解
微信的扫码支付主要有以下过程:
向微信统一下单地址发送详细的订单信息,微信返回json数据,里面包含生成二维码的字段,使用生成二维码的插件qrcode生成二维码返回给前端,让用户扫码完成支付,然后页面跳转到return_url告知用户支付成功,微信服务器正式通知支付成功之后修改数据库数据。
//Pay类下的主要方法 publicfunctionbuildRequestForm($pay_data){ $UNIFIED_ORDER_URL='weixin://wxpay/bizpayurl?sign';//统一下单地址 $data=array(); $data['appid']=$this->config['appid']; $data['mch_id']=$this->config['mchid']; $data['nonce_str']=$this->getNonceStr(32);//随机32位字符串 $data['sign']=$this->MakeSign($data);//签名 $data['product_id']=$pay_data['out_trade_no']; $data['body']=$pay_data['title']; $data['detail']=$pay_data['title'].'WechatPayment'; $data['out_trade_no']=$pay_data['out_trade_no']; $data['fee_type']='USD';//使用美元支付 $data['total_fee']=1;//注意单位是分 $data['spbill_create_ip']=$_SERVER['REMOTE_ADDR']; $data['notify_url']=$this->config['notify_url']; $data['trade_type']="NATIVE";//交易类型 //转为xml格式 $xml_param=$this->ToXml($data); ////发送请求使用封装好的curl_post $result=$this->FromXml($this->postXmlCurl($xml_param,$this->gateway)); if($result['return_code']==='SUCCESS'){ if($this->CheckSign($result)){ $code_img=$this->get_code_src($result['code_url']); $return_data['code_img']=$code_img; $return_data['pay_data']=$data; return$return_data; }else{ E("微信订单错误!"); } }else{ E("微信订单错误!".$result['return_msg']); } } /* *生成二维码 *@paramstring$code_url,需要生成二维码的地址; *@return$filepath,生成的二维码图片所在地址; */ publicfunctionget_code_src($code_url){ $QRcode=new\PHPQRCode\QRcode(); $filename=time().$this->getNonceStr(3).'.png'; $filepath=request()->domain().__ROOT__.'/Uploads/qrcode/'.$filename; $res=$QRcode->png($code_url,'./Uploads/qrcode/'.$filename); return$filepath; }
调用过程如下:
/*调用是在Controller的一个方法下面,这里只截取了一段,具体如何使用视自己情况而定。 *@paramstring$pay_type,支付类型‘wxpay'; *@paramarray$pay_info详细的支付信息,包括订单标题、金额、商品数量等等信息; *@paramarray$pay_config,支付配置,包括appID,appSecrt; */ $pay=newPay($info['pay_type'],$pay_config); if($info['pay_type']=='wxpay'&&!isset($_SERVER['HTTP_X_WAP_PROFILE'])){ $return_data=$pay->buildRequestForm($info); $this->assign('return_data',$return_data); $this->assign('return_json',json_encode($return_data)); $this->display();//向用户展示二维码 exit(); }
注:零云是基于thinkPHP的快速建站的框架,所以这个插件在TP中也适用。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!