热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Php微信小程序支付

微信小程序支付官方参数小程序中代码后端发起支付代码支付回调官方参数文档地址:https:developers.weixin.qq.comminiprogramdeva


微信小程序支付

  • 官方参数
  • 小程序中代码
  • 后端发起支付代码
  • 支付回调


官方参数

在这里插入图片描述


文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/payment/wx.requestPayment.html



小程序中代码

如果说你的小程序中有其他登陆方式,比如手机登陆,那么支付的时候就要先去获取用户的openid

// 获取用户的openid
get_user_openid:function(){let that = this;let openid = app.globalData.openid;if (openid){run_pay(that);}else{ // 先获取用户openidapp.get_user_openid(function (data) {run_pay(that);})}
},

下面看看发起支付

// 立即支付
function run_pay(that){let bookReadData = wx.getStorageSync('bookReadData');let channel = app.globalData.QRXS_CHANNEL;let bid = bookReadData.bid;app.httpRequest(config.payOrderBe, {}, function (data) {let product = '开通畅读卡';var postdata = {product: product,detail: product,fee: that.data.pay_price * 100,reward: that.data.reward,bid: bid,channel: channel,timestamp: data.timestamp,nonceStr: data.nonceStr,signature: data.signature,}postdata['openid'] = app.globalData.openidpostdata['sign'] = md5.md5(postdata.product + postdata.detail + postdata.fee + postdata.timestamp + postdata.reward + config.APP_KEY);app.httpRequest(config.payOrder, postdata, function (data) {var res_data = data;var nonceStr = res_data.nonceStr;var outtradeno = res_data.OutTradeNo;var wxpackage = res_data.package;var paysign = res_data.paySign;var timestamp = res_data.timestamp;wx.requestPayment({'timeStamp': timestamp,'nonceStr': nonceStr,'package': wxpackage,'signType': 'MD5','paySign': paysign,'success': function (res) {console.log(res)//成功应该要刷新用户信息,还有当前章节是否开通if (res.errMsg === "requestPayment:ok") {if (that.data.show_back === 1) {app.getUserData(); // 刷新用户信息wx.redirectTo({url: '/pages/buyCard/buyStatus/buyStatus?type=1',})} else {wx.switchTab({url: '/pages/my/my'})}}},'fail': function (res) {console.log(res)if (res.errMsg == "requestPayment:fail cancel") {wx.redirectTo({url: '/pages/buyCard/buyStatus/buyStatus?type=0',})}},'complete': function (res) {console.info('complete');}});});})
}

后端发起支付代码

发起支付第一步,获取支付所需信息,
跟网页端支付差不多

// 获取支付所需签名等
function wx_begin(){include_once "Application/Xcx4/ORG/WxPaySync/jssdk.php";$jssdk = new \JSSDK('wxabxxxxxb66bd', '647474836xxxxxxxxxxxxxxxx9221d724');$signPackage = $jssdk->GetSignPackage();return_json_data(1,'ok',$signPackage);}

发起支付

public function wx_pay(){$uid = $this->uid;if (!$uid){return_json_data(0,'请先登录');}$userInfo = $this->userInfo;$body = I('product','trim','购买书币'); //商品描述$detail = I('detail','trim','购买书币'); //商品详情$total_fee = I('fee','intval',0); //第三方订单总金额 单位分$sign = I('sign','trim,addslashes',''); //APP与应用服务器之间的数据签名$month = I('month','trim,addslashes',''); //购买月份数$bid = I('bid','intval',0); $openid = I('openid','trim,addslashes',''); // 用户openidd $timestamp = $_REQUEST['timestamp']; //时间戳$nonceStr = trim(strip_tags($_REQUEST['nonceStr']));// 写入订单 $out_trade_no = 'xcx'.$this->uid.date("mdHis").rand(2000,8000);if(!$out_trade_no ){return_json_data(0,'充值失败'.$insertId);}//使用jsapi接口$notify_url = $this->notify_host.'/Xcx4/notify/wx'; //通知地址include_once "Application/Xcx4/ORG/WxPaySync/WxPayPubHelper.php";$jsApi = new \JsApi_pub();//使用统一支付接口$unifiedOrder = new \UnifiedOrder_pub();$unifiedOrder->setParameter("openid",$openid);//商品描述$unifiedOrder->setParameter("body","$body");//商品描述//自定义订单号,此处仅作举例$unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号COOKIE('pcode_trade_no',$out_trade_no,60*10);//转分//$total_fee = $total_fee*100;$unifiedOrder->setParameter("total_fee","$total_fee");//总金额$unifiedOrder->setParameter("notify_url",$notify_url);//通知地址$unifiedOrder->setParameter("trade_type","JSAPI");//交易类型$prepay_id = $unifiedOrder->getPrepayId();//=========步骤3:使用jsapi调起支付============$jsApi->setPrepayId($prepay_id);$jsApiParameters = $jsApi->getNewParameters($timestamp,$nonceStr);$data = array("timestamp"=>($jsApiParameters["timestamp"]),"nonceStr"=>$jsApiParameters['nonceStr'],"package"=>$jsApiParameters['package'],"signType"=>$jsApiParameters['signType'],"paySign"=>$jsApiParameters['paySign'],'OutTradeNo'=>$out_trade_no);return_json_data(1,'ok',$data);
}

支付回调


//v3.0版微信支付回调接口
public function wx(){include_once "Application/Xcx4/ORG/WxPaySync/WxPayPubHelper.php";//使用通用通知接口$notify = new \Notify_pub();//存储微信的回调$xml = $GLOBALS['HTTP_RAW_POST_DATA'];$notify->saveData($xml);//验证签名,并回应微信。//对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,//微信会通过一定的策略(如30分钟共8次)定期重新发起通知,//尽可能提高通知的成功率,但微信不保证通知最终能成功。if($notify->checkSign() == FALSE){$notify->setReturnParameter("return_code","FAIL");//返回状态码$notify->setReturnParameter("return_msg","签名失败");//返回信息}else{$notify->setReturnParameter("return_code","SUCCESS");//设置返回码}if($notify->checkSign() == true){$out_trade_no = $notify->data["out_trade_no"];//订单号$trade_no = $notify->data["transaction_id"];//微信支付订单号$result_code = $notify->data["result_code"];//业务结果$bank_type = $notify->data["bank_type"];//付款银行$is_subscribe = $notify->data["is_subscribe"];//是否关注公众号$openid = $notify->data["openid"];///支付成功 业务逻辑操作 echo '';}else{echo '';}
}

推荐阅读
  • SQLite是一种轻量级的关系型数据库管理系统,尽管体积小巧,却能支持高达2TB的数据库容量,每个数据库以单个文件形式存储。本文将详细介绍SQLite在Android开发中的应用,包括其数据存储机制、事务处理方式及数据类型的动态特性。 ... [详细]
  • MVC框架下使用DataGrid实现时间筛选与枚举填充
    本文介绍如何在ASP.NET MVC项目中利用DataGrid组件增强搜索功能,具体包括使用jQuery UI的DatePicker插件添加时间筛选条件,并通过枚举数据填充下拉列表。 ... [详细]
  • 字符、字符串和文本的处理之Char类型
    .NetFramework中处理字符和字符串的主要有以下这么几个类:(1)、System.Char类一基础字符串处理类(2)、System.String类一处理不可变的字符串(一经 ... [详细]
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
  • 1<table>2<tr>3<th>ID<th>4 ... [详细]
  • 本文介绍了多种将多行数据合并为单行的方法,包括使用动态SQL、函数、CTE等技术,适用于不同的SQL Server版本。 ... [详细]
  • 在使用 Ant Design 的 SubMenu 组件时,遇到无法读取 'isRootMenu' 属性的 TypeError。本文将探讨该问题的原因及解决方案。 ... [详细]
  • 本文探讨了SQLAlchemy ORM框架中如何利用外键和关系(relationship)来建立表间联系,简化复杂的查询操作。通过示例代码详细解释了relationship的定义、使用方法及其与外键的相互作用。 ... [详细]
  • Cadence SPB 16.5 安装指南与注意事项
    本文提供了详细的 Cadence SPB 16.5 安装步骤,包括环境配置、安装过程中的关键步骤以及常见问题的解决方案。适合初次安装或遇到问题的技术人员参考。 ... [详细]
  • HTTP中的Chunked编码与Content-Length的区别及应用场景
    本文探讨了在HTTP协议中,当使用Transfer-Encoding为chunked时为何无需设置Content-Length,以及这种编码方式的具体实现和优势。 ... [详细]
  • 深入解析Android Activity生命周期
    本文详细探讨了Android中Activity的生命周期,通过实例代码和详细的步骤说明,帮助开发者更好地理解和掌握Activity各个阶段的行为。 ... [详细]
  • 本文章利用header()函数来实现页面跳,我们介绍到404,302,301等状态跳转哦,下面有很多的状态自定的函数有需要的同学可以测试一下。heade ... [详细]
  • 本文介绍了JSP的基本概念、常用标签及其功能,并通过示例详细说明了如何在JSP页面中使用Java代码。 ... [详细]
  • 本文详细介绍了PHP中的回调函数及其多种实现方式,包括函数字符串、匿名函数、类静态方法和类方法。同时,探讨了闭包的概念及其在PHP中的应用,通过实例展示了如何利用闭包访问外部变量。 ... [详细]
  • 本文介绍如何使用Python编程语言合并字典中具有相同集合值的键,并提供两种实现方法。 ... [详细]
author-avatar
yuhemecy_883
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有