zoukankan      html  css  js  c++  java
  • 微信公众号支付

    =============================================================== 公众号支付问题 =============================================================
    1. 参数有问题,id前面没有问号 /example/jsapi.phpid=2?code=001A2wej24e0cL00vvej2nfuej2A2wen&state=STATE 解决方法: 修改 /example/WxPay.JsApiPay.php 文件 GetOpenid方法 $baseUrl 改为:$baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']);

    2. attach 有中文,会导致签名验证不正确
    解决方法:
    md5 前需 urldecode 编码
    urldecode(http_build_query($data)
    //####################################### notify.php 充值回调 验证签名及数据获取  #####################################//
    //验证签名
    foreach($data as $k=>$v){
    	if($v == ''){
    		unset($data[$k]); //空参数不参与签名
    	}
    }
    $sign = isset($data['sign']) ? $data['sign'] : '';
    if($sign != ''){
    	unset($data['sign']); //sign不参与签名
    }
    ksort($data);
    $key = '&key='.WxPayConfig::KEY;
    $secret_str = strtoupper(md5(urldecode(http_build_query($data).$key)));
    
    if($secret_str != $sign){
    	$msg = '签名不正确';
    	return false;
    }
    
    //获取微信返回数据
    $id = $data['out_trade_no'];   //平台支付订单号
    $transaction_id = $data['transaction_id']; //微信订单号
    $total_fee = $data['total_fee']/100; //充值金额
    $result_code = $data['result_code']; //业务结果
    $now = time();
    

      

    *************************************************** 以下是 扫码支付案例 native.php 代码 ************************************************************

    //###################################### 开启session ##############################################//
    session_start();
    //####################################################################################//
    ini_set('date.timezone','Asia/Shanghai');
    //error_reporting(E_ERROR);
    
    require_once "../lib/WxPay.Api.php";
    require_once "WxPay.NativePay.php";
    require_once 'log.php';
    
    //####################################### 判断用户是否已登录 #############################################//
    //获取数据
    $userid = isset($_SESSION['userid']) ? $_SESSION['userid'] : 0;
    $id = isset($_GET['id']) ? intval($_GET['id']) : $_GET['id'];   //订单ID
    
    //判断用户是否已登录
    if($userid == 0){
        echo '未登录';exit;
    }
    
    //####################################### 验证订单 #############################################//
    $pdo = new PDO('mysql:host=192.168.1.211;dbname=yyweipan;charset=utf8', 'root', '123456');
    
    //判断订单是否属于当前账号
    $rs = $pdo->query('select * from yywl_recharge where Id='.$id);
    $recharge = $rs->fetch();
    if(empty($recharge) || $recharge['UserId'] != $userid){
        echo '订单不存在';exit;
    }
    $money = $money*100;
    
    //####################################################################################//
    
    //模式一
    /**
     * 流程:
     * 1、组装包含支付信息的url,生成二维码
     * 2、用户扫描二维码,进行支付
     * 3、确定支付之后,微信服务器会回调预先配置的回调地址,在【微信开放平台-微信支付-支付配置】中进行配置
     * 4、在接到回调通知之后,用户进行统一下单支付,并返回支付信息以完成支付(见:native_notify.php)
     * 5、支付完成之后,微信服务器会通知支付成功
     * 6、在支付成功通知中需要查单确认是否真正支付成功(见:notify.php)
     */
    $notify = new NativePay();
    $url1 = $notify->GetPrePayUrl($id);
    
    //模式二
    /**
     * 流程:
     * 1、调用统一下单,取得code_url,生成二维码
     * 2、用户扫描二维码,进行支付
     * 3、支付完成之后,微信服务器会通知支付成功
     * 4、在支付成功通知中需要查单确认是否真正支付成功(见:notify.php)
     */
    $input = new WxPayUnifiedOrder();
    $input->SetBody("test");
    $input->SetAttach("test");
    $input->SetOut_trade_no($id);	//商家订单号
    $input->SetTotal_fee($money);	//金额
    $input->SetTime_start(date("YmdHis"));
    $input->SetTime_expire(date("YmdHis", time() + 600));
    $input->SetGoods_tag("test");
    $input->SetNotify_url("http://ce.gzhouyo.com/weixin/example/notify.php");	//异步回调地址
    $input->SetTrade_type("NATIVE");
    $input->SetProduct_id($id);	//产品ID
    $result = $notify->GetPayUrl($input);
    $url2 = $result["code_url"];
    

      

    <html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
        <meta name="viewport" content="width=device-width, initial-scale=1" /> 
        <title>微信支付样例-退款</title>
    </head>
    <body>
    	<div style="margin-left: 10px;color:#556B2F;font-size:30px;font-weight: bolder;">扫描支付模式一</div><br/>
    	<img alt="模式一扫码支付" src="http://paysdk.weixin.qq.com/example/qrcode.php?data=<?php echo urlencode($url1);?>" style="150px;height:150px;"/>
    	<br/><br/><br/>
    	<div style="margin-left: 10px;color:#556B2F;font-size:30px;font-weight: bolder;">扫描支付模式二</div><br/>
    	<img alt="模式二扫码支付" src="http://paysdk.weixin.qq.com/example/qrcode.php?data=<?php echo urlencode($url2);?>" style="150px;height:150px;"/>
    	
    </body>
    </html>
    

      

  • 相关阅读:
    静态代理和动态代理
    Tomcat的作用思考及NIO的应用(要区分Java NIO和操作系统的NIO模型)
    破坏双亲委托机制的一些情况---Tomcat和JDBC,破坏后的安全问题
    springboot cache---本地缓存的使用
    springboot--异步执行的方法及定时执行的方法
    springboot--事务的使用
    数据结构--堆排序
    数据结构--树的非递归遍历
    最长公共子串的长度和构造
    2015 小结及其2016计划
  • 原文地址:https://www.cnblogs.com/hefei/p/5786612.html
Copyright © 2011-2022 走看看