微信支付遇到的坑

最近搞了个公众号,由于是新手,微信支付那一块其中就遇到了不少的坑,为此商家因为我的失误就丢了差不多1000块。。下面总结一下遇到的坑

 图为微信支付的官方文档

图为实际文档的代码

如果你用过微信支付的sdk,就会发现支付的设置是在jsapi.php这个文件下面,其中上面的那段代码是微信支付js api的调用,如果有支付行为就会调用function里面的函数,如果是返回的信息是"get_brand_wcpay_request:ok",就会执行if里面你的写的代码,按道理来说if里面一般放置支付成功后的操作,但是这个是前端页面。。使用者可以去修改前端的页面,包括js。。这个是问题关键,我一开始以为是微信网页,在电脑打不开,就比较安全了,就没深思那么多,没想到上线之后还是有人可以修改前端页面,看来我还是太年轻了,直接跳过判断。。执行下一步操作,为此商家损失了几百块。由于那时候微信支付那一块我不懂,是找别人做这一块,我做另一块的,所以果断掉坑了,而那个人又不太负责任,据说那个人现在还去一个类似于慕课网的授课网站写微信支付的教程,我tm也是呵呵了,最后那个人想了一下给我建议,就是用微信的查询订单api功能去查询有没有该订单,如果没有该订单号,则证明他是跳过支付来执行下一段代码的。至于订单号,我是通过js的获取微秒级别的函数获取的时间戳作为商家的订单号的。

我想了一下大概可能出现的情况,做了个微信支付判断,如果有不法分子留意,有以下几种情况:

   1.没有该微信订单号存在(通过修改前端支付判断的代码跳过支付直接进行下一步)

   2.该订单号没有支付成功

   3.该微信订单号为空

   4.传过来的订单号是已经使用过的(旧的订单号,这样就可能会造成支付成功一次,以后买同样商品不用钱了)

   5.传过来的订单支付的金额和你的商品价格不对(如果有人有心,买了个便宜商品,再把前端js代码改了一下,不把时间戳的微信单号传过来,下次买个贵的商品再把该单号传过来,你也gg了)

下面是我的判断代码

    // 订单号不空,
    if(isset($_REQUEST["out_trade_no"]) && $_REQUEST["out_trade_no"] != "")
    {
        $out_trade_no = $_REQUEST["out_trade_no"];
        $input = new WxPayOrderQuery();
        $input->SetOut_trade_no($out_trade_no);
        $message =WxPayApi::orderQuery($input); /** 这里是一个数组 */
        // 存在该微信订单号
        if(!empty($message))
        {
            // 该订单号支付成功
            if($message[‘trade_state‘] =="SUCCESS")
            {    /** 支付成功 */

                // 判断价格是否和商品对应
                $a = $nowPrice*100;
                if($message[‘total_fee‘]!=$a)
                {//

                }
            }
            // 订单号没有不成功支付
            else
            {
                echo "订单不存在.";
                mysql_query($sql);
                exit(0); /** 错误码 0*/
            }
        }
        // 该订单号不存在
        else
        {
            exit(-1);
        }
    }
    // 没有存过来单号
    else
    {
        echo "呵呵,玩你妹";
        exit(0);
    }
    // 记录微信单号
    $sql = "select tradeid from OddNumber where tradeid = {$out_trade_no};";
    $res = mysql_query($sql);
    $arr = mysql_fetch_assoc($res);
    //不空证明订单存在,就是已经用过了
    if(!empty($arr) ){
        echo "订单存在";
        exit(-1);
    }
    // 下面是支付成功后的代码

好了。。这就是微信支付的坑。。我感觉还有更多的坑面对着我,昨晚又遇到一个坑。。微信支付文档本来写着$message[‘total_fee‘]是int,但是到了php又是string型,和数据库数据判断又出错了

时间: 2024-11-08 18:40:14

微信支付遇到的坑的相关文章

微信支付的那些坑!!!

微信支付的那些坑! 开通和审核 微信支付和支付宝商家平台一样,都是要审核资质的,支付宝个人认证可以使用担保支付,虽然需要用户确认收货之后才能收到资金,但是好歹也是能用的.微信直接不让个人使用支付.只有企业以上级别的服务号才能申请. 开通&认证 支付宝注册企业账号,进行企业认证,我总共就花了10分钟,包括公司资质审核,打款到公账确认公账等步骤.效率高到简直无法想象. 微信支付需要已经认证过的服务号才能开通支付.提交完资质,等待审核,花了5个工作日的时间才告诉我资质审核过了,对,没错,是5个工作日,

微信支付.net官方坑太多,我们来精简

微信支付官方坑太多,我们来精简 我把官方的代码,打包成了 an.wxapi.dll. 里面主要替换了下注释.呵呵.然后修改了几个地方. 修改一.Config.cs 1 namespace an.wxapi 2 { 3 public class WxPayConfig 4 { 5 6 public static string AppKey(string key) 7 { 8 return System.Configuration.ConfigurationManager.AppSettings[k

android调用微信支付,填坑

关于android调用微信支付,在网上基本是骂声一片.在于官方文档,对于许多问题都没有描述.我罗列一下我遇到的麻烦,供大家参考 首先想要获取微信支付功能,必须在微信开放平台,申请app 支付能力,根据官方文档,按照要求,完成后 官方会提供 appid .appsercert两个重要参数.以及自己设置的应用签名 一:官方文档 https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1 根据官方文档,app需要先调用预支付接口获得 p

支付宝支付 微信支付的小坑(2)

1)为什么支付成功不能打开APP 2)为什么支付的时候不能调用支付宝钱包或者不能调用微信支付 3)为什么那么多支付宝微信支付集成那么多编译报错啊 4)为什么不能接收到支付成功的回调 5)后台没有RSA加密想把支付宝的加密修改成MD5加密可以吗? 6)后台怎么知道支付成功了啊? 此问题有时间我会一一回答

记一次微信支付开发的坑!!

在对接微信小程序时,由于微信对于小程序的接口只能通过 https 进行传输. 然后在写支付的配置的时候 异步通知接口  notify 的时候,填了 https://xxx.xxx.com/api/notify 导致一直收不到回调通知. 后来改为了http就可以了,折腾了一个晚上,进行个各种调试,没想到是这个问题.. 在此立贴谨记!! 原文地址:https://www.cnblogs.com/jianzhen/p/9119657.html

iOS之 接入新浪微博 SDK(微信支付) 的坑(registerApp 的问题)

最近在做一个 iOS 的 cocos2d-x 项目接入新浪微博 SDK 的时候被"坑"了,最后终于顺利的解决了.发现网上也有不少人遇到一样的问题,但是能找到的数量有限的解决办法写得都不详细,很难让人理解,我来深入的写一写. 我的开发环境 Mac OS X 10.10.1 Xcode 6.1.1 (6A2008a) Cocos2d-x 3.2 新浪微博 SDK for iOS 2015 年 1 月 5 日从 github clone 的版本 遇到的问题 根据新浪微博 SDK 附带的文档接

iOS 微信支付流程详解

背景 自微信支付.支付宝支付入世以来,移动端的支付日渐火热.虚拟货币有取代实体货币的趋向(这句纯属扯淡,不用管),支付在app开发中是一项基本的功能,有必要去掌握.从难易程度上讲,不管是微信支付还是支付宝支付都是非常简单的,因为第三方的支付文档非常详细,而且他们内部的安全性也非常高.作为使用这些支付策略的我们,只需要掌握流程,能够实现正常支付的功能即可.为什么要写下这篇博文,原因有二.其一,微信支付流程中有坑,其二,以后忘记了可以拿出来看看. 配置 1.微信支付需要两个账号,财付通和微信开发者,

微信支付的开发

前言:之前听说过微信支付有很多坑,其实没有想象的那么坑,整体感觉很容易上手,按照它的流程来不会有错!PS:官方的流程看的TMD烦,好啦,废话有点多,进入开发.(ps:每个微信的版本一直都在更新,这是2015/6/1给你们做的标记下QQ:1242384226,欢迎随便骚扰,女士优先!大神也优先!咦…)一:怎么用官方DEMO1.    申请得到AppID秘钥什么的这里不写了.2.    下载官方DEMO,真机测试,目的是你看看里面需要哪些参数,实现哪些方法等等.3.     4.    问题来了,测

微信支付--签名错误问题

最近在做微信支付,调用微信的统一下单支付接口http://mch.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1时,老是返回"签名错误",偶尔可以成功,不知道是怎么回事.我在日志中打印出生成的字符串和签名,然后用相同的数据在微信支付提供的在线支付调试工具生成签名,发现生成的签名结果一样!生成的最终xml也一样,但接口就是返回 <xml><return_code><![CDATA[FAIL]]><