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


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 相关文章推荐
Js 获取HTML DOM节点元素的方法小结
Apr 24 Javascript
javascript 打印内容方法小结
Nov 04 Javascript
JavaScript QueryString解析类代码
Jan 17 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
Apr 02 Javascript
jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
Apr 27 Javascript
javascript学习笔记(十二) RegExp类型介绍
Jun 20 Javascript
javascript列表框操作函数集合汇总
Nov 28 Javascript
Javascript小技能总结(推荐)
Jun 02 Javascript
js获取隐藏元素的宽高
Feb 24 Javascript
django js 实现表格动态标序号的实例代码
Jul 12 Javascript
详解Vue3 Composition API中的提取和重用逻辑
Apr 29 Javascript
javascript实现固定侧边栏
Feb 09 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
英雄试炼之肉山谷—引领RPG新潮流
2020/04/20 DOTA
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
php的大小写敏感问题整理
2011/12/29 PHP
php远程下载类分享
2016/04/13 PHP
JavaScript 事件查询综合
2009/07/13 Javascript
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
2010/06/19 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
JavaScript立即执行函数的三种不同写法
2014/09/05 Javascript
简单分析javascript面向对象与原型
2015/05/21 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
2016/06/28 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
Vue实现自带的过滤器实例
2017/03/09 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
js es6系列教程 - 基于new.target属性与es5改造es6的类语法
2017/09/02 Javascript
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
Javascript的console['']常用输入方法汇总
2018/04/26 Javascript
Vue 框架之动态绑定 css 样式实例分析
2018/11/14 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
jQuery实现放大镜案例
2020/10/19 jQuery
JavaScript async/await原理及实例解析
2020/12/02 Javascript
Python写入数据到MP3文件中的方法
2015/07/10 Python
python实现微信小程序自动回复
2018/09/10 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
python 利用文件锁单例执行脚本的方法
2019/02/19 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
python 实现检验33品种数据是否是正态分布
2019/12/09 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
最新奶茶店创业计划书
2014/01/25 职场文书
出纳员岗位职责
2014/03/13 职场文书
宝宝满月酒主持词和仪式流程
2014/03/27 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
实习协议书
2015/01/27 职场文书
导游词300字
2015/02/13 职场文书
行政处罚听证告知书
2015/07/01 职场文书
公司人事管理制度
2015/08/05 职场文书