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


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进行数组遍历如何跳出当前的each循环
Jun 05 Javascript
node.js开机自启动脚本文件
Dec 24 Javascript
Angular工具方法学习
Dec 26 Javascript
ES6中Proxy代理用法实例浅析
Apr 06 Javascript
Angular 4依赖注入学习教程之简介(一)
Jun 04 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
Apr 22 Javascript
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
Nov 21 Javascript
深入学习JavaScript 高阶函数
Jun 11 Javascript
微信小程序自定义组件实现环形进度条
Nov 17 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
Dec 07 Javascript
vuex入门最详细整理
Mar 04 Javascript
Javascript执行上下文顺序的深入讲解
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
sony ICF-2010 拆解与改装
2021/03/02 无线电
php中字符串和正则表达式详解
2014/10/23 PHP
php实现三级级联下拉框
2016/04/17 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
javascript常用的方法整理
2015/08/20 Javascript
JS实现无限级网页折叠菜单(类似树形菜单)效果代码
2015/09/17 Javascript
js实现网页收藏功能
2015/12/17 Javascript
Vue.js每天必学之过滤器与自定义过滤器
2016/09/07 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
2017/04/28 jQuery
Bootstrap fileinput文件上传预览插件使用详解
2017/05/16 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
2018/12/14 Javascript
详解Python3的TFTP文件传输
2018/06/26 Python
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
python 实现矩阵填充0的例子
2019/11/29 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
艺术爱好者的自我评价分享
2013/10/08 职场文书
档案检查欢迎词
2014/01/13 职场文书
区三好学生主要事迹
2014/01/30 职场文书
《棉鞋里的阳光》教学反思
2014/04/24 职场文书
世界遗产导游词
2015/02/13 职场文书
五一劳动节慰问信
2015/02/14 职场文书
小学数学教师研修日志
2015/11/13 职场文书
CSS3 天气图标动画效果
2021/04/06 HTML / CSS
python处理json数据文件
2022/04/11 Python