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


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的图片剪切插件
Aug 03 Javascript
js String对象中常用方法小结(字符串操作)
Jan 27 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
Jun 20 Javascript
jquery ajax修改全局变量示例代码
Nov 08 Javascript
javascript自定义的addClass()方法
May 28 Javascript
jquery动画效果学习笔记(8种效果)
Nov 13 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
Nov 29 Javascript
jQuery toggle 代替方法
Mar 22 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
Jul 21 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
Apr 18 Javascript
JS隐藏号码中间4位代码实例
Apr 09 Javascript
vue keep-alive 动态删除组件缓存的例子
Nov 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
PHP Token(令牌)设计
2008/03/15 PHP
9个PHP开发常用功能函数小结
2011/07/15 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
php 文本文件的读取效率
2012/02/10 PHP
PHP序列号生成函数和字符串替换函数代码
2012/06/07 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
基于jquery的无刷新分页技术
2011/06/11 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
JS之获取样式的简单实现方法(推荐)
2016/09/13 Javascript
EsLint入门学习教程
2017/02/17 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
2017/09/07 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
python多线程threading.Lock锁用法实例
2014/11/01 Python
Windows平台Python连接sqlite3数据库的方法分析
2017/07/12 Python
python中的计时器timeit的使用方法
2017/10/20 Python
python selenium 对浏览器标签页进行关闭和切换的方法
2018/05/21 Python
Python动态导入模块的方法实例分析
2018/06/28 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
python能在浏览器能运行吗
2020/06/17 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
开发人员所需要知道的HTML5性能分析面面观
2012/07/05 HTML / CSS
澳大利亚排名第一的儿童在线玩具商店:Toy Galaxy
2018/10/06 全球购物
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
历史系毕业生自荐信
2013/10/28 职场文书
求职信范文怎么写
2014/01/29 职场文书
2014国庆节演讲稿:祖国在我心中(400字)
2014/09/25 职场文书
加薪申请报告范本
2015/05/15 职场文书
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
2021/05/28 Python
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js