微信扫码支付零云插件版实例详解
微信扫码支付零云插件版实例详解
微信的扫码支付主要有以下过程:
向微信统一下单地址发送详细的订单信息,微信返回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中也适用。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!