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


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 相关文章推荐
javascript 面向对象编程基础 多态
Aug 21 Javascript
基于JQuery 滑动与动画的说明介绍
Apr 18 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
Jun 27 Javascript
JavaScript中window.open用法实例详解
Apr 15 Javascript
浅析JavaScript中浏览器的兼容问题
Apr 19 Javascript
基于jquery实现最简单的选项卡切换效果
May 08 Javascript
详解AngularJS2 Http服务
Jun 26 Javascript
详解vue 数组和对象渲染问题
Sep 21 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
Sep 05 Javascript
layui table 多行删除(id获取)的方法
Sep 12 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
Sep 25 Javascript
实例讲解JavaScript 计时事件
Jul 04 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
星际玩家的三大定律
2020/03/04 星际争霸
PHP中操作ini配置文件的方法
2013/04/25 PHP
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
php绘制一条弧线的方法
2015/01/24 PHP
PHP实现小偷程序实例
2016/10/31 PHP
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
基于jquery的商品展示放大镜
2010/08/07 Javascript
appendChild() 或 insertBefore()使用与区别介绍
2013/10/11 Javascript
JsRender实用入门教程
2014/10/31 Javascript
js分页工具实例
2015/01/28 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
超实用的JavaScript表单代码段
2016/02/26 Javascript
jQuery事件委托之Safari
2016/07/05 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
JS函数进阶之继承用法实例分析
2020/01/15 Javascript
python中执行shell的两种方法总结
2017/01/10 Python
python 图像平移和旋转的实例
2019/01/10 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
Python hashlib模块加密过程解析
2019/11/05 Python
Python3如何对urllib和urllib2进行重构
2019/11/25 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
Speedo澳大利亚官网:全球领先游泳品牌
2018/02/04 全球购物
任意存:BOXFUL
2018/05/21 全球购物
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
大学生上课迟到检讨书
2014/10/15 职场文书
高中生个性发展自我评价
2015/03/09 职场文书
从严治党主题教育活动总结
2015/05/07 职场文书
如何写好闭幕词
2019/04/02 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL