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


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制作的放大效果的popup对话框(未添加任何jquery plugin)分享
Apr 28 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
Jul 29 Javascript
jQuery带时间的日期控件代码分享
Aug 26 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
Aug 05 Javascript
Node.js + Redis Sorted Set实现任务队列
Sep 19 Javascript
Bootstrap基本样式学习笔记之按钮(4)
Dec 07 Javascript
jQuery UI Grid 模态框中的表格实例代码
Apr 01 jQuery
使用vue构建一个上传图片表单
Jul 04 Javascript
vue2.0在table中实现全选和反选的示例代码
Nov 04 Javascript
微信小程序实现漂亮的弹窗效果
May 26 Javascript
vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多(步骤详解)
Jan 14 Javascript
JavaScript实现两个数组的交集
Mar 25 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
完美解决PHP中的Cannot modify header information 问题
2013/08/12 PHP
PHP数组常用函数实例小结
2018/08/20 PHP
thinkphp5修改view到根目录实例方法
2019/07/02 PHP
彪哥1.1(智能表格)提供下载
2006/09/07 Javascript
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
JavaScript DOM 学习第九章 选取范围的介绍
2010/02/19 Javascript
javascript中的对象创建 实例附注释
2011/02/08 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
2013/11/01 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
2013/11/15 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
JS实现FLASH幻灯片图片切换效果的方法
2015/03/04 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
js完整倒计时代码分享
2016/09/18 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
canvas实现弧形可拖动进度条效果
2017/05/11 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
基于vue 动态加载图片src的解决方法
2018/02/05 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
tensorflow实现对图片的读取的示例代码
2018/02/12 Python
python中的协程深入理解
2019/06/10 Python
Django视图类型总结
2021/02/17 Python
结构和类有什么异同
2012/07/16 面试题
开办加工厂创业计划书
2014/01/03 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
银行贷款收入证明
2014/10/17 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
市级三好生竞选稿
2015/11/21 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL
vue使用节流函数的踩坑实例指南
2021/05/20 Vue.js
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python
星际争霸 Light vs Action 一场把教主看到鬼畜的比赛
2022/04/01 星际争霸