PHP微信支付功能
阅读原文时间:2023年07月10日阅读:1

百度网盘:http://pan.baidu.com/s/1sl5GeVr  l5ud

先下载一份sdk ,引入到自己的项目中,我用的是TP5,配置好namespace

然后在项目中引入:

之后,在去配置文件。config.php

通常操作就是。

用户访问一个方法,在方法里面new wechatpay。得到一个结果集 。

然后再去调用sdk的一些内部方法

把一些要存到数据库里面的。放在缓存里面待用,比如传入的金钱,还有类型,用户uid等。也可以做一个签名验证操作。我这里就不做了。

这里访问成功的话,微信那边就会调用那个之前设置好的回调接口。就是之前我们在config.php里面设置的那个

// 重置成功回调
public function Callback()
{

    $input = file\_get\_contents("php://input");  // 用输入流接收

    libxml\_disable\_entity\_loader(true);  
    $xml = json\_decode(json\_encode(simplexml\_load\_string($input, 'SimpleXMLElement', LIBXML\_NOCDATA)), true);  
    Cache::set('ec',$xml);

    Log::write('测试日志信息,这是警告级别,并且实时写入'.var\_export($xml, true),'notice');  
    //判断是否是付款成功的回调  
    if($xml && $xml\['return\_code'\] == 'SUCCESS' && $xml\['result\_code'\] == 'SUCCESS'){

         // 以下是我的逻辑处理代码。  
        $uid = Cache::get('userid');

        $data\['openid'\] = $xml\['openid'\];  
        $data\['total\_fee'\] = $xml\['total\_fee'\];  
        $data\['out\_trade\_no'\] = $xml\['out\_trade\_no'\];  
        $data\['time\_end'\] = strtotime($xml\['time\_end'\]);  
        $data\['uid'\] = $uid;  
        $data\['money'\] = Cache::get('money');  
        $data\['payObjType'\] = Cache::get('payObjType');  
        $data\['payObjId'\] = Cache::get('payObjId');  
        $res = Db::name('moneydetail')->insert($data);

        Cache::set('res',$res);  
        if($res){  
            switch ($data\['payObjType'\]) {  
                case '1':  
                    # 打赏帖子  
                    Db('user\_info')->where('id',$uid)->setInc('merits',$data\['money'\]);  
                    break;  
                case '2':  
                    # 充值功德值  
                    switch ($data\['money'\]) {  
                        case '900':  
                            $new\_num = 99;  
                            break;  
                        case '3900':  
                            $new\_num = 439;  
                            break;  
                        case '9900':  
                            $new\_num = 1299;  
                            break;  
                        case '19900':  
                            $new\_num = 3199;  
                            break;  
                        case '36900':  
                            $new\_num = 7399;  
                            break;  
                        case '99900':  
                            $new\_num = 24999;  
                            break;  
                        default:  
                            # code...  
                            break;  
                    }  
                    Db('user\_info')->where('id',$uid)->setInc('merits',$new\_num);

                    break;  
                case '3':  
                    # 打赏平台  
                    Db('user\_info')->where('id',$uid)->setInc('merits',$data\['money'\]);  
                    break;

                default:  
                    # code...  
                    break;  
            }  
            // 清空缓存  
            Cache::set('money',NULL);  
            Cache::set('userid',NULL);  
            Cache::set('payObjType',NULL);  
            Cache::set('payObjId',NULL);  
        }  
    }

}

基本上了