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


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获取自定义属性(attr和prop)实例介绍
Apr 21 Javascript
$.getJSON在IE下失效的原因分析及解决方法
Jun 16 Javascript
js 页面元素的几个用法总结
Nov 18 Javascript
三种动态加载js的jquery实例代码另附去除js方法
Apr 30 Javascript
JavaScript简单表格编辑功能实现方法
Apr 16 Javascript
JavaScript代码实现图片循环滚动效果
Mar 19 Javascript
原生js实现新闻列表展开/收起全文功能
Jan 20 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
Jun 19 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
Aug 28 Javascript
JavaScript中使用参数个数实现重载功能
Sep 01 Javascript
Vue精简版风格概述
Jan 30 Javascript
JS扁平化输出数组的2种方法解析
Sep 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之COOKIE支持详解
2010/09/20 PHP
php实现的漂亮分页方法
2014/04/17 PHP
IE6-IE9不支持table.innerHTML的解决方法分享
2012/09/14 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
微信小程序 定位到当前城市实现实例代码
2017/02/23 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
2017/05/08 jQuery
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
2020/06/05 Javascript
在vue中给后台接口传的值为数组的格式代码
2020/11/12 Javascript
JS数据类型分类及常用判断方法
2020/11/19 Javascript
[01:36:17]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第一场 1月31日
2021/03/11 DOTA
python list语法学习(带例子)
2013/11/01 Python
python使用装饰器和线程限制函数执行时间的方法
2015/04/18 Python
Django数据库表反向生成实例解析
2018/02/06 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
2018/06/04 Python
浅谈PYTHON 关于文件的操作
2019/03/19 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
使用Keras构造简单的CNN网络实例
2020/06/29 Python
夜大自我鉴定
2013/10/31 职场文书
店长助理岗位职责
2013/12/13 职场文书
精彩的演讲稿开头
2014/05/08 职场文书
学校食品安全实施方案
2014/06/14 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
2015年度内部审计工作总结
2015/05/20 职场文书
初中毕业感言300字
2015/07/31 职场文书