微信jsapi支付获取code_微信开发之微信公众平台开发之JSAPI公众号支付
本文将带你了解微信开发微信公众平台开发之JSAPI公众号支付,希望本文对大家学微信有所帮助。
一:配置参数
申请成功后,获取接口文件, 将所有文件放入项目根目录weixin下,在WxPay.ub.config.php中填入配置账户信息;
二:设置授权
开发者中心->网页服务->网页授权获取用户基本信息->修改;
“授权回调页面域名修改成你的域名地址即可,须保证网页授权已获得,不然会报redirect_uri 参数错误;
三:网页授权获取用户openid
js_api_call.php 请求文件中改动(所有传给微信的参数都在入口文件中接收)
$out_trade_no = $_GET[‘out_trade_no‘]; //商户系统内部订单号 32个字符内
$total_fee = $_GET[‘total_fee‘]*100; //订单总金额 单位为分,不能带小数点,所以须把价格乘以100,
不然获取prepay_id时会报错误(设置金额字段时最好设为小数点后2位)
$pay_status = get_pay_status($out_trade_no);//查看订单支付状态
$return_url = get_return_url($out_trade_no); //设置支付成功后跳转页面
//使用jsapi接口
$jsApi = new JsApi_pub();
//通过code获得openid
if (!isset($_GET[‘code‘])) { //触发微信返回code码
//设置redirect_uri参数,返回code码地址,其实就是重定向到当前页面,获取用户code码参数
$url = WxPayConf_pub::JS_API_CALL_URL."?showwxpaytitle=1&out_trade_no=$out_trade_no&total_fee=$total_fee";
$url = $jsApi->createOauthUrlForCode($url);
Header("Location: $url");
}else{ //获取code码,以获取openid
$code = $_GET[‘code‘];
$jsApi->setCode($code);
$openid = $jsApi->getOpenId(); //用户标识
}
再就是WxPayHubHelper.php文件 JsApi_pub()类下createOauthUrlForCode($redirectUrl)方法, 第二个参数
改为 $urlObj["redirect_uri"] = urlencode($redirectUrl); //对$url变量进行url编码 不然header重定向时无法获取订单号和金额
四:设置统一支付接口参数,获取prepay_id (预支付ID 微信生成的预支付 ID,用于后续接口调用中使用)
微信支付->开发配置->支付测试->测试授权目录和测试白名单添加
(支付授权目录需要精确到最细一级的目录,且在使用时,目录名称后直接加文件名,如ccc.com/weixin/)
确保你 WxPayPubHelper.php文件里 UnifiedOrder_pub 这个类的getPrepayId这个方法能正常使用
这一步的调试在 getPrepayId()内 var_dump($this->result); 就能看到错误代码;
posXml这个方法后调用了createXml这个方法
function postXml() {
$xml = $this->createXml();
//**在此处查看xml文件是否正常生成
include_once("log_.php");
$log = new Log_();
$log->log_result("log.txt",$xml);
//** 由于打印一些xml格式的文件只显示字符长度,不显示内容。于是用log的形式写在服务器上调试
$this->response = $this->postXmlCurl($xml,$this->url,$this->curl_timeout);
return $this->response;
}
保证xml这个变量格式如下;
参数正确,postXmlCurl才能正确提交,提交后就能得到正确的prepay_id,就能弹出支付框了
五:使用jsapi调起支付
根据prepay_id生成jsapi支付参数
$jsApi->setPrepayId($prepay_id);
$jsApiParameters = $jsApi->getParameters();
//调用微信JS api 支付
function jsApiCall() {
WeixinJSBridge.invoke(
‘getBrandWCPayRequest‘,
,
function(res){
WeixinJSBridge.log(res.err_msg);
if(res.err_msg == "get_brand_wcpay_request:ok") { //支付成功后
window.location.href="" //跳转地址及订单操作,在异步页面也须处理订单,防止同步时失败
}else{
alert("支付失败"+res.err_code+res.err_desc+res.err_msg);
}
}
);
}(每次请求callpay方法时须判断订单状态,防止重复提交)
六:通用通知接口 异步处理微信返回结果
支付完成后,notify.php中获取微信的回调
$xml = $GLOBALS[‘HTTP_RAW_POST_DATA‘];
//须验证签名,并回应微信。
if($notify->checkSign() == TRUE) //签名验证通过并更新订单状态后
$notify->setReturnParameter("return_code","SUCCESS"); //设置返回码,保证支付状态改变后才返回成功
//对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,
//微信会通过一定的策略(如30分钟共8次)定期重新发起通知,
$returnXml = $notify->returnXml();
echo $returnXml;(将xml数据返回微信 当return_code为SUCCESS时,不会再通知)
//当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,
如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,
以避免函数重入造成的数据混乱.
//判断是否在微信浏览器打开
function isWeiXin(){
var ua = window.navigator.userAgent.toLowerCase();
if(ua.match(/MicroMessenger/i) == ‘micromessenger‘){
return true;
}else{
return false;
}
}
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之微信频道!
微信jsapi支付获取code_微信开发之微信公众平台开发之JSAPI公众号支付相关推荐
- 微信公众平台开发之360全景
微信公众平台开发之360全景功能是商家推广自己的产品的非常有效的方法之一.现在大多数的人买东西都不喜欢去看繁杂的文字描述,而更喜欢看实物图.所有之前我们做过微信相册用于展示我们的产品,但是光靠相册的 ...
- 微信公众平台开发之DIY宣传页
微信公众平台开发之DIY宣传页功能是商家推广自己的官方微信的途径之一.做任何产品的推广,活动的宣传都离不开用户关注我们的官方微信,所有我们有必要把自己的宣传页做的非常的漂亮,大气和美观,从而吸引用户去 ...
- Java微信公众平台开发之OAuth2.0网页授权
根据官方文档点击查看在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的"开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息"的配置选项中,修 ...
- 微信公众平台开发之MySql数据库+关键词回复-php语言(三)
2019-3-28 15:09:02更新: 感谢各位的支持.最早发帖是在大四毕业论文期间,所以针对第一次接触微信公众号的学生.时过境迁,4年过去了,在微信上遇到了方方面面的问题,这里贡献些自己的学习资 ...
- 微信公众平台开发之LBS等API使用-php语言(六)
在公众平台开发过程中,有时为了丰富微信公众号,我们需要调用第三方API.下面以BAE3.0 LBS天气查询为例,触类旁通: //==================================== ...
- 微信公众平台开发之Java实现群发消息
首先贴上官方文档: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432 私以为这份文档写的还是很不错的,在开发的 ...
- 微信网页第三方登录原理 微信开放平台和公众平台的区别 1.公众平台面向的时普通的用户,比如自媒体和媒体,企业官方微信公众账号运营人员使用,当然你所在的团队或者公司有实力去开发一些内容,也可以调用公众
微信网页第三方登录原理 微信开放平台和公众平台的区别 1.公众平台面向的时普通的用户,比如自媒体和媒体,企业官方微信公众账号运营人员使用,当然你所在的团队或者公司有实力去开发一些内容,也可以调用公众平 ...
- 仿京细菜谱微信小程序源码 云开发菜谱微信小程序源码
京细菜谱是一个美食分享网站,提供优质的家常菜谱大全,仿京细菜谱小程序源码为喜欢美食的朋友提供了很多的美食烹饪教程 让您轻松学会做美食.对不同食材和地域的饮食做了不同的分类和详细的做菜方法 分类十分详细 ...
- 微信小程序获取系统日期和时间 —— 微信小程序教程系列(17)
获取当前系统日期和时间 在小程序中,新建项目时,就会有一个utils.js文件,就是获取日期和时间的,代码如下: utils.js: function formatTime(date) {var ye ...
最新文章
- Data Lake Analytics: 读/写PolarDB的数据
- React.js 2016 最佳实践 徬梓阅读 1584收藏 71
- struct结构体初始化3种方法
- 扩展Linux分区的一种方法
- 刚刚,Redis公布了5.0版本12项新特性
- erwin怎么设置编码_Word页码的设置方式
- python环境配置(二)——centos6+ 安装python3.6以及pip3
- (纯CSS)悬浮一个元素,让另一个元素改变属性
- javascript版购物网站图片轮转
- qt自定义控件_Qt编写自定义控件60-声音波形图
- 【vuejs面试题】务必熟知的vuejs面试题「务必收藏」
- kaggle案例:数据科学社区调查报告(附学习视频)
- 招行笔试java编程
- 润乾报表统计图联动刷新
- xilinx_ug903阅读记录
- 打开设备管理器找不到Android Composite ADB Interface
- android仿最新版本微信相册--附源码
- Linux rm -rf 之rm: cannot remove `linux': Device or resource busy
- 忍看朋辈离职去,怒向HR要加薪
- matlab计算sinx近似值,《Matlab与数学实验》期末作业
热门文章
- 2020 年 “游族杯” 全国高校程序设计网络挑战赛
- office2007打开word弹出烦人的提示框
- 第13届广东工业大学ACM程序设计大赛
- wps连接zotero,方便文献插入
- VBA中如何判断数组为空
- java 常量和变量 区别_Java常量和变量的区别是什么
- 聚名:数字顺子域名都很贵吗?顺子域名有市场需求吗?
- 【Three.js基础】坐标轴辅助器、requestAnimationFrame处理动画、Clock时钟、resize页面尺寸(二)
- Python 代码混淆和加密技术简述
- 打印A4纸图片需要多少像素和分辨率?