微信JSAPI支付实现
1.获取到mch_id ,appid,appsecrect,api秘钥
2.下载安装证书
3.在商户中心配置jsapi目录,发起起调的页面。
4.公众号配置回调域名,业务,js域名。
5.加入安全白名单。
不多说了上代码前端
<script>
function wxpay(){var money = $('#paymoney').text();
var o_sonid=$('#o_sonid').attr('data-id');
var o_sonid=parseInt(o_sonid);
var money =parseFloat(money);
var id = $('.this').find('.index_id').val();if(money){$.ajax({url:"{:U('Orders/wxpay')}",data:{money:money,id:o_sonid,},dataType:"json",type:"POST",success:function(data){WeixinJSBridge.invoke('getBrandWCPayRequest',data,function(res){if(res.err_msg == 'get_brand_wcpay_request:ok'){window.location.reload();}});}})}else{alert('请确定金额!');}
}
</script>
后端代码
function wxpay(){$money=I('post.money');$id=I('post.id'); //对应订单子订单$order_goods=M('order_goods');$orderinfo=$order_goods->where('id='.$id)->find();$out_trade_no= $orderinfo['create_time'].mt_rand(0000,9999);$order_goods->where('id='.$id)->setField('out_trade_no',$out_trade_no);// $data= M('order')->where('order_id='.$_POST['id'])->find();$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';$arr = array('appid' => $this->appid,'mch_id' => $this->mch_id,'nonce_str' => $this->getNonceStr(),'body' =>$orderinfo['goods_name'],'out_trade_no' => $out_trade_no,'total_fee' => $money * 100,// 'total_fee' => 1,'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],'notify_url' => 'http://xxxxx.com/index.php/Home/Orders/weixin/','trade_type' => 'JSAPI','openid' => $_SESSION['openid']);$arr['sign'] = $this->sign($arr);$data = $this->ToXml($arr);$result = $this->postData($url,$data);$options = array('appId' => $this->appid,'timeStamp' => (string)time(),'nonceStr' => $this->getNonceStr(),'package' => 'prepay_id='.$result['prepay_id'],'signType' => 'MD5',);$options['paySign'] = $this->sign($options);die(json_encode($options));}//支付回调处理(不能继承基类验证页面之类的)public function weixin(){$postStr = $GLOBALS['HTTP_RAW_POST_DATA'];$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);if($postObj->return_code == 'SUCCESS'){//获取交易金额 ,修改订单状态。$money = $postObj->total_fee;$money = (iconv("gbk", "UTF-8", $money))/100;$out_trade_no= $postObj->out_trade_no;$out_trade_no = (iconv("gbk", "UTF-8", $out_trade_no));$order_goods=M('order_goods');$order_goods->pay_money=$money;$order_goods->payment_notify_time=time();$order_goods->pay_status='2';$map['out_trade_no']=$out_trade_no;$order_goods->where($map)->save();//商品销售量+1$o_soninfo=M('order_goods')->where('out_trade_no='.$out_trade_no)->find();M('goods')->where('id='.$o_soninfo['goods_id'])->setInc('sale_num');}die('<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>');}//微信授权(必须先获取用户openid)public function access_token(){// $tid = $_REQUEST['tid'];$code = $_REQUEST['code'];$res = file_get_contents("https://api.weixin.qq.com/sns/oauth2/access_token?appid=你的appid&secret=你的app秘钥&code=".$code."&grant_type=authorization_code");$list = json_decode($res);$access_token = $list->access_token;$openid = $list->openid;$row = file_get_contents("https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN");$arr = json_decode($row);if ($arr->openid) {$data['openid'] = $arr->openid;$data['create_time'] =time();$data['status']='1';$data['img']=$arr->headimgurl;// $data['tid'] = $tid;$id = M('user')->where("openid='".$data['openid']."'")->getField('id');if(!$id){$id = M('user')->add($data);}$_SESSION['uid'] = $id;session('uid',$id);$_SESSION['openid'] = $data['openid'];if($_SESSION['uid']){$this->redirect('User/index');}}}//获取code码public function getOpenId(){$url = 'http://xxxxx.com/index.php/Home/Orders/access_token/';$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=?&redirect_uri='.urlencode($url).'&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';header('location:'.$url);}
ps:再说一些开发中遇到的坑
1.如果拿不到openid 果断换个服务器试试吧,不多说了都是泪~。
2.支付过程中不能用session传递参数
3.别的没啥了
微信JSAPI支付实现相关推荐
- php微信jsapi支付小结,ThinkPHP接入微信支付 - JSAPI支付
一.支付准备 二.获取用户openid 首先,到微信公众平台后台 - 设置 - 网页授权域名(别忘了添加开发者) // 在头部引入WechatPubService.php文件,见附录一 use app ...
- 微信JSAPI支付 跟 所遇到的那些坑
首先介绍一下我在调用微信支付接口使用的是 weixin.senparc SDK,非常方便好用开源的一个微信开发SDK. weixin.senparc SDK 官网:http://weixin.senp ...
- 微信JSApi支付~订单号和微信交易号
返回目录 谈谈transactionId和out_trade_no 前一篇微信JSApi支付~坑和如何填坑文章反映不错,所以又写了个后篇,呵呵. 每个第三方在线支付系统中都会有至少两类订单号,其一为支 ...
- 微信JSAPI支付对接流程及支付接口设计
文章目录 前言 一.JSAPI支付场景及逻辑 二.开发步骤 1.设置支付目录 2.设置授权域名 3.业务流程 三.代码设计 1. 支付页面 2. Controller 3. JS调起支付 4. 工具类 ...
- 关于微信JSAPI支付成功后,点击完成后没有返回值并且页面被自动关闭问题
微信JSAPI支付成功后,点击完成后没有返回值并且页面被自动关闭 简介 解决方式 错误的处理方式 总结 简介 最近很多人可能都遇到一个问题,在使用微信JSAPI支付成功后,不走成功的回调方法,只有支付 ...
- JAVA+微信JSAPI支付
JAVA+微信JSAPI支付 引入依赖 获取请求ip 组装微信支付请求 回调处理 引入依赖 <dependency><groupId>com.github.binarywang ...
- php接入微信JSAPI支付,微信内拉起支付,基于thinkPHP框架 WeChatDeveloper支付类包
文章:php接入微信支付,扫码支付和H5支付(非微信浏览器),基于thinkPHP框架 WeChatDeveloper支付类包 踩坑指南 文章:php快速接入支付宝即时支付,PC网站支付和手机网站支付 ...
- php 微信统一下单接口,微信JSAPI支付,统一下单接口
微信JSAPI支付,统一下单接口 今天小编给大家分享一下微信支付的统一下单接口,其实微信官网上也有SDK和DEMO下载了,但是不太好理解,小编就自己整理一份容易理解的代码,看不懂官方的,就来看看小编这 ...
- C# .NETMVC 微信JSAPI支付
C# .NET MVC微信JSAPI支付 经过本人不断翻找资料和百度终于结合一些大佬的经验和思路弄出来一个MVC的微信支付了. 再弄微信支付之前我们需要先有一个商户号,并且开通了微信支付的JSAPI支 ...
- Java 微信jsapi支付
spring boot微信jsapi支付 话不多说,撸起袖子就是干,下面上源码 pom.xml 配置文件 resources/wx.properties 配置类 service(WechatPaySe ...
最新文章
- 【Dual-Path-RNN-Pytorch源码分析】model的架构图
- Netty笔记(一)第一个程序
- %@page contentType=text/html;charset=gbk%与meta http-equiv=Content-Type content=text/html; ch...
- LINUX中软件包的分类
- 计组-控制器的功能和工作原理
- 《实战突击.php项目开发案例整合》.(明日科技).[PDF]ckook
- 函数域中申请堆空间出函数后不会自动释放
- 微信淘宝等平台要互通!?腾讯阿里字节回应
- 二倍图三倍图什么意思_为什么说我们需要软件架构图?
- CCF 2013-12-1 出现次数最多的数
- Item08. 多级指针(Pointers to Pointers)
- JavaScriptSerializer 类
- UVa 10970 大块巧克力
- 参与esri用户大会感想
- 矢量控制——SVPWM
- mysql同时满足升序和降序_mysql中的升序和降序以及一个字段升序和一个字段降序...
- 阻抗,特征阻抗与等效阻抗
- FFmpeg拼接文件时报错channel element 1.0 is not allocated的分析思路和解决方法
- iOS 应用签名原理
- 自然语言处理-jieba