tp3实现微信公众号支付
ThinkPHP  /  管理员 发布于 8年前   1146
1.首先拿到APPID,MCHID,KEY,APPSECRET,NOTIFY_URL,然后在WxPayConfig填写;
2.授权目录url直接到支付方法;
3.回调写你自己的回调url;
4.把官方demo下载放在verdor目录 我的放在 http://houtizong.iask.in/tp5blog/index/download/
控制器:
//weix支付
public function wxpay()
{
Vendor('lib.JSSDK');
Vendor('lib.WxPayJsApiPay');
Vendor('lib.log');
Vendor('lib.WxPayApi');
//实例化JSSDK
$jssdk=new \JSSDK(C('appid'),C('appSecret'));
//获取数据
$signPackage =$jssdk->GetSignPackage();
//初始化日志
$logHandler= new \CLogFileHandler("./logs/".date('Y-m-d').'.log');
$loginfo=\Log::Init($logHandler, 15);
//①获取用户openid
$tools=new \JsApiPay();
$openId = $tools->GetOpenid();
//②统一下单
$input=new \WxPayUnifiedOrder();
$input->SetBody("公益捐款"); //设置商品或支付单简要描述
$input->SetAttach("附加数据"); //设置附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
$input->SetOut_trade_no(\WxPayConfig::MCHID.date("YmdHis")); //设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
$input->SetTotal_fee("1"); //设置订单总金额,只能为整数,详见支付金额
$input->SetTime_start(date("YmdHis")); //设置订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
$input->SetTime_expire(date("YmdHis",time()+ 600)); //设置订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则
$input->SetGoods_tag("商品标记"); //设置商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠
$input->SetNotify_url("xxx/index/wxcall");//设置接收微信支付异步通知回调地址
$input->SetTrade_type("JSAPI"); //设置取值如下:JSAPI,NATIVE,APP,详细说明见参数规定
$input->SetOpenid($openId); //设置trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。
$order = \WxPayApi::unifiedOrder($input);
$jsApiParameters=$tools->GetJsApiParameters($order);
$this->assign('jsApiParameters',$jsApiParameters);
$this->assign('signPackage',$signPackage);
$this->display();
}
//回调
public function wxcall()
{
// $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
// // 这句file_put_contents是用来查看服务器返回的XML数据 测试完可以删除了
// file_put_contents('./Application/Public/log.txt',$xml,FILE_APPEND);
// //将服务器返回的XML数据转化为数组
// //$data = json_decode(json_encode(simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA)),true);
// $data = xmlToArray($xml);
// // 保存微信服务器返回的签名sign
// $data_sign = $data['sign'];
// // sign不参与签名算法
// unset($data['sign']);
// $sign = $this->makeSign($data);
// // 判断签名是否正确 判断支付状态
// if ( ($sign===$data_sign) && ($data['return_code']=='SUCCESS') && ($data['result_code']=='SUCCESS') ) {
// $result = $data;
// // 这句file_put_contents是用来查看服务器返回的XML数据 测试完可以删除了
// file_put_contents('./Application/Public/log1.txt',$xml,FILE_APPEND);
// //获取服务器返回的数据
// $order_sn = $data['out_trade_no']; //订单单号
// $order_id = $data['attach']; //附加参数,选择传递订单ID
// $openid = $data['openid']; //付款人openID
// $total_fee = $data['total_fee']; //付款金额
// //更新数据库
// $this->updateDB($order_id,$order_sn,$openid,$total_fee);
// }else{
// $result = false;
// }
// // 返回状态给微信服务器
// if ($result) {
// $str='';
// }else{
// $str='';
// }
// echo $str;
// return $result;
}<!DOCTYPE html>
<html>
<script>
(function (doc, win) {
var docEl = doc.documentElement,
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
recalc = function () {
var clientWidth = docEl.clientWidth;
if (!clientWidth) return;
if(clientWidth>=640){
docEl.style.fontSize = '100px';
}else{
docEl.style.fontSize = 100 * (clientWidth / 640) + 'px';
}
};
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);
</script>
<head>
<meta charset="utf-8">
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1">
<script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js" type="text/javascript" charset="utf-8"></script>
<title>wxpay</title>
</head>
<body>
<div class="pay" style="margin:0 auto">
<p style="font-size: 20px;">商品名称:侯哥支付</p>
<p style="font-size: 20px;">金额大小:1分钱</p>
<span id="zhifu" style="margin:0 auto;width:237px;height:72px;border: 1px solid #DECECE;font-size: 20px;padding: 10px;border-radius: 5px;">
去支付
</span>
</div>
</body>
<script>
onload=function() {
document.getElementById('zhifu').addEventListener('touchstart',function() {
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
}else{
jsApiCall();
}
function jsApiCall() {
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
{$jsApiParameters},
function(res){
WeixinJSBridge.log(res.err_msg);
if(res.err_msg.indexOf('ok')!=-1){
localStorage.clear();
//location.href='{:U('wxpay')}'
}
}
);
}
});
}
</script>
</html> 效果图:

122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号
