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


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』.html(),.text()和.val()的概述及使用
Apr 22 Javascript
JS实现slide文字框缩放伸展效果代码
Nov 05 Javascript
Javascript for in的缺陷总结
Feb 03 Javascript
Angular.js实现动态加载组件详解
May 28 Javascript
Vue学习笔记进阶篇之过渡状态详解
Jul 14 Javascript
在Vue中如何使用Cookie操作实例
Jul 27 Javascript
详解webpack多页面配置记录
Jan 22 Javascript
React Router v4 入坑指南(小结)
Apr 08 Javascript
详解如何使用webpack打包JS
Jun 21 Javascript
js实现ATM机存取款功能
Oct 27 Javascript
JavaScript基于遍历操作实现对象深拷贝功能示例
Mar 05 Javascript
微信小程序利用云函数获取手机号码
Dec 17 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 escape URL编码
2008/12/10 PHP
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
Yii扩展组件编写方法实例分析
2015/06/29 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
javascript css float属性的特殊写法
2008/11/13 Javascript
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
jquery 定位input元素的几种方法小结
2013/07/28 Javascript
全面理解面向对象的 JavaScript(来自ibm)
2013/11/10 Javascript
javascript中if和switch,==和===详解
2015/07/30 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
深入浅析JS的数组遍历方法(推荐)
2016/06/15 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
2019/05/14 Javascript
Vue数字输入框组件使用方法详解
2020/02/10 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
python对url格式解析的方法
2015/05/13 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
Django app配置多个数据库代码实例
2019/12/17 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
Django中的session用法详解
2020/03/09 Python
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
冰淇淋开店创业计划书
2014/02/01 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
房产转让协议书(2014版)
2014/09/30 职场文书
房屋维修申请报告
2015/05/18 职场文书
Nginx快速入门教程
2021/03/31 Servers
Python爬取某拍短视频
2021/06/11 Python
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫