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


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 相关文章推荐
FireFox JavaScript全局Event对象
Jun 14 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
Dec 10 Javascript
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
Jun 04 Javascript
js 遍历json返回的map内容示例代码
Oct 29 Javascript
JavaScript异步回调的Promise模式封装实例
Jun 07 Javascript
jQuery自带的一些常用方法总结
Sep 03 Javascript
Javascript中实现trim()函数的两种方法
Feb 04 Javascript
js实现一键复制功能
Mar 16 Javascript
强大的JavaScript响应式图表Chartist.js的使用
Sep 13 Javascript
浅谈vuex为什么不建议在action中修改state
Feb 02 Javascript
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
Feb 11 Javascript
JS如何把字符串转换成json
Feb 21 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
打造计数器DIY三步曲(下)
2006/10/09 PHP
PHP编程中八种常见的文件操作方式
2006/11/19 PHP
一个比较简单的PHP 分页分组类
2009/12/10 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
PHP使用GIFEncoder类处理gif图片实例
2014/07/01 PHP
Laravel中10个有用的用法小结
2019/05/06 PHP
让getElementsByName适应IE和firefox的方法
2007/09/24 Javascript
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
2014/08/06 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
vue中各组件之间传递数据的方法示例
2017/07/27 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
浅谈Vue组件单元测试究竟测试什么
2020/02/05 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
python 换位密码算法的实例详解
2017/07/19 Python
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
python使用selenium实现批量文件下载
2019/03/11 Python
python操作日志的封装方法(两种方法)
2019/05/23 Python
python下载库的步骤方法
2019/10/12 Python
Python 异步协程函数原理及实例详解
2019/11/13 Python
python函数不定长参数使用方法解析
2019/12/14 Python
使用python matploblib库绘制准确率,损失率折线图
2020/06/16 Python
利用Node实现HTML5离线存储的方法
2020/10/16 HTML / CSS
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
COS美国官网:知名服装品牌
2019/04/08 全球购物
2015国庆节66周年演讲稿
2015/03/20 职场文书
2015重阳节敬老活动总结
2015/07/29 职场文书
2019广播稿怎么写
2019/04/17 职场文书
在JavaScript中如何使用宏详解
2021/05/06 Javascript