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


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 相关文章推荐
extjs 初始化checkboxgroup值的代码
Sep 21 Javascript
jquery用get实现ajax在ie里面刷新不进入后台解决方法
Aug 12 Javascript
JavaScript中setUTCFullYear()方法的使用简介
Jun 12 Javascript
微信QQ的二维码登录原理js代码解析
Jun 23 Javascript
利用js定义一个导航条菜单
Mar 14 Javascript
jQuery实现 RadioButton做必选校验功能
Jun 15 jQuery
JavaScript 完成注册页面表单校验的实例
Aug 19 Javascript
Angular2学习笔记之数据绑定的示例代码
Jan 03 Javascript
详解如何在微信小程序中愉快地使用sass
Jul 30 Javascript
electron 安装,调试,打包的具体使用
Nov 06 Javascript
ES6 async、await的基本使用方法示例
Jun 06 Javascript
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 Vue.js
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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
php 中英文语言转换类
2011/09/07 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
WampServer搭建php环境时遇到的问题汇总
2015/07/23 PHP
php-app开发接口加密详解
2018/04/18 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
validator验证控件使用代码
2010/11/23 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
jQuery解析json数据实例分析
2015/11/24 Javascript
微信公众号 客服接口的开发实例详解
2016/09/28 Javascript
Angular下H5上传图片的方法(可多张上传)
2017/01/09 Javascript
jquery.form.js异步提交表单详解
2017/04/25 jQuery
vue实现自定义H5视频播放器的方法步骤
2019/07/01 Javascript
javascript绘制简单钟表效果
2020/04/07 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
[55:35]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第二场 1月22日
2021/03/11 DOTA
python实现得到一个给定类的虚函数
2014/09/28 Python
深入理解python中的浅拷贝和深拷贝
2016/05/30 Python
python3.5仿微软计算器程序
2020/03/30 Python
Django进阶之CSRF的解决
2018/08/01 Python
用什么库写 Python 命令行程序(示例代码详解)
2020/02/20 Python
python实现FTP循环上传文件
2020/03/20 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
String是最基本的数据类型吗?
2013/06/13 面试题
六年级数学教学反思
2014/02/03 职场文书
2014年国庆节演讲稿
2014/09/02 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
班级管理经验交流材料
2015/11/02 职场文书
保安辞职申请书应该怎么写?
2019/07/15 职场文书
简述python四种分词工具,盘点哪个更好用?
2021/04/13 Python
Golang使用Panic与Recover进行错误捕获
2022/03/22 Golang