微信扫码支付零云插件版实例详解


Posted in Javascript onApril 26, 2017

微信扫码支付零云插件版实例详解

微信的扫码支付主要有以下过程:

向微信统一下单地址发送详细的订单信息,微信返回json数据,里面包含生成二维码的字段,使用生成二维码的插件qrcode生成二维码返回给前端,让用户扫码完成支付,然后页面跳转到return_url告知用户支付成功,微信服务器正式通知支付成功之后修改数据库数据。

//Pay类下的主要方法
public function buildRequestForm($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'].' Wechat Payment';
  $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']);
  }
}

 

/*
 * 生成二维码
 * @param string $code_url,需要生成二维码的地址;
 * @return $filepath,生成的二维码图片所在地址;
 */
public function get_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的一个方法下面,这里只截取了一段,具体如何使用视自己情况而定。
 * @param string $pay_type,支付类型‘wxpay';
 * @param array $pay_info详细的支付信息,包括订单标题、金额、商品数量等等信息;
 * @param array $pay_config,支付配置,包括appID,appSecrt;
 */
$pay = new Pay($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中也适用。

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
jQuery的实现原理的模拟代码 -5 Ajax
Aug 07 Javascript
js更优雅的兼容
Aug 12 Javascript
js中获取事件对象的方法小结
Mar 13 Javascript
javascript开发技术大全-第3章 js数据类型
Jul 03 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
Dec 04 Javascript
javascript制作的简单注册模块表单验证
Apr 13 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
Dec 13 Javascript
不同js异步函数同步的实现方法
May 28 Javascript
用headjs来管理和加载js 提高网站加载速度
Nov 29 Javascript
JavaScript多线程运行库Nexus.js详解
Dec 22 Javascript
基于vue2.0动态组件及render详解
Mar 17 Javascript
Vue的click事件防抖和节流处理详解
Nov 13 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
Apr 26 #Javascript
微信小程序 实例开发总结
Apr 26 #Javascript
AngularJS 霸道的过滤器小结
Apr 26 #Javascript
JavaScript纯色二维码变成彩色二维码
Jul 23 #Javascript
xmlplus组件设计系列之按钮(2)
Apr 26 #Javascript
xmlplus组件设计系列之列表(4)
Apr 26 #Javascript
JS实现数组按升序及降序排列的方法
Apr 26 #Javascript
You might like
重量级动漫纷纷停播!唯独OVERLORD第四季正在英魂之刃继续更新
2020/05/06 日漫
PHP 函数语法介绍一
2009/06/14 PHP
PHP简单获取随机数的常用方法小结
2017/06/07 PHP
php文件上传类的分享
2017/07/06 PHP
可以将word转成html的js代码
2010/04/11 Javascript
使用javascipt---实现二分查找法
2013/04/10 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
不得不分享的JavaScript常用方法函数集(上)
2015/12/23 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
详解node.js 下载图片的 2 种方式
2018/03/02 Javascript
nodejs同步调用获取mysql数据时遇到的大坑
2019/03/02 NodeJs
VsCode与Node.js知识点详解
2019/09/05 Javascript
element form 校验数组每一项实例代码
2019/10/10 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
javaScript实现一个队列的方法
2020/07/14 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
Python多线程编程(二):启动线程的两种方法
2015/04/05 Python
Python实现约瑟夫环问题的方法
2016/05/03 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
python实现弹窗祝福效果
2019/04/07 Python
通过Python pyecharts输出保存图片代码实例
2020/11/25 Python
pycharm 的Structure界面设置操作
2021/02/05 Python
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
农田水利实习自我鉴定
2013/09/19 职场文书
化工工艺专业求职信
2013/09/22 职场文书
毕业生自荐信的主要内容
2013/10/29 职场文书
《我的信念》教学反思
2014/02/15 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
师德先进个人材料
2014/12/20 职场文书