php微信支付全记录

1.调用前准备

1)查看商户平台 appid,key,secret,mchid(商户号);

获取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN

2)在商户平台将前台调用微信支付的页面地址加入商户平台中(否则报url未注册错误)

    如http://www.baidu.com/test/demo.html

    则要将http://www.baidu.com/test/  加入到商户平台后台url注册中

3)下载商户平台支付证书,在api证书下载中下载

    登录微信支付商户平台,点击【账户中心】->【账户设置】->【API安全】->【下载证书】中,下载及设置;

    除了apiclient_cert.p12,apiclient_cert.pem,apiclient_key.pem,还有rootca.pem要加入证书中

4)引入官方方法文件



大致目录结构为:


2.配置WxPay.Config.php



/**


*  配置账号信息


*/


class WxPayConfig


{


  //=======【基本信息设置】=====================================


//


/**


    * TODO: 修改这里配置为您自己申请的商户信息


    * 微信公众号信息配置


*


* APPID:绑定支付的APPID(必须配置,开户邮件中可查看)


*


* MCHID:商户号(必须配置,开户邮件中可查看)


*


* KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)


* 设置地址:https://pay.weixin.qq.com/index.php/account/api_cert


*


* APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置),


* 获取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN


    * @var string


*/


  const APPID = appid;


  const MCHID = mchid;


  const KEY = key;


  const APPSECRET = secret;


  //=======【证书路径设置】=====================================


/**


    * TODO:设置商户证书路径


    * 证书路径,注意应该填写绝对路径(仅退款、撤销订单时需要,可登录商户平台下载,


* API证书下载地址:https://pay.weixin.qq.com/index.php/account/api_cert,下载之前需要安装商户操作证书)


    * @var path


*/


  const SSLCERT_PATH = '../cert/apiclient_cert.pem';


  const SSLKEY_PATH = '../cert/apiclient_key.pem';


  //=======【curl代理设置】===================================


/**


    * TODO:这里设置代理机器,只有需要代理的时候才设置,不需要代理,请设置为0.0.0.0和0


    * 本例程通过curl使用HTTP POST方法,此处可修改代理服务器,


* 默认CURL_PROXY_HOST=0.0.0.0和CURL_PROXY_PORT=0,此时不开启代理(如有需要才设置)


    * @var unknown_type


*/


  const CURL_PROXY_HOST = "0.0.0.0";//"10.152.18.220";


  const CURL_PROXY_PORT = 0;//8080;


//=======【上报信息配置】===================================


/**


    * TODO:接口调用上报等级,默认紧错误上报(注意:上报超时间为【1s】,上报无论成败【永不抛出异常】,


    * 不会影响接口调用流程),开启上报之后,方便微信监控请求调用的质量,建议至少


* 开启错误上报。


* 上报等级,0.关闭上报; 1.仅错误出错上报; 2.全量上报


    * @var int


*/


  const REPORT_LEVENL = 1;


}


3.示例代码


//支付方式


$payData['user_id']=$_SESSION['uid'];//用户id 此处保存在session中,其他自取


//0余额 1微信公众号 2微信app 3支付宝app


$payData['type']=1;


//0:消费 1:充值


$payData["plus_minus"] = 0;


$payData["sum"] = (金额);


$payData["order_type"] = $_REQUEST['order_type'];//支付状态


$payData["order_id"] = $id;


$payData["order_num"] = time() . rand(100, 1000);//支付订单号,随机生成


if ($_REQUEST['order_type'] == 1) {


    $payData["detail"] = "活动报名充值";


} else if ($_REQUEST['order_type'] == 2) {


    $payData["detail"] = "余额充值";


}


//0:未支付 1:已支付


$payData['status']=0;


vendor('WeiXinPay.JSAPI');//此处为官方接口文件目录引用方法


$tools = new JsApiPay();


//$openid = $tools->GetOpenid();


$openid = $userinfo["openid"];//获取用户openid 自取


$Out_trade_no = $payData["order_num"];


$Body = 'incubator';


$Total_fee = $_REQUEST['charge']*100; //1=0.01元 所以*100


//次数order_type 表示支付状态 如果为1 则添加数据库操作


if($_REQUEST['order_type'] == 1){


//....将支付数据信息(如活动报名成功信息)加入数据库


}else{


         $input = new WxPayUnifiedOrder();


              $input->SetBody($Body);


              $input->SetAttach("test");


              $input->SetOut_trade_no($Out_trade_no);


//        $input->SetOut_trade_no(WxPayConfig::MCHID . date("YmdHis"));


              $input->SetTotal_fee($Total_fee);


              $input->SetTime_start(date("YmdHis"));


              $input->SetTime_expire(date("YmdHis", time() + 600));




//发送Notify


$input->SetNotify_url("http://yf.haoapp123.com/fuhuaqi2/api.php/incubator/wechatPayNotify");


              $input->SetTrade_type("JSAPI");


              $input->SetOpenid($openid);


              //        $order = WxPayApi::unifiedOrder($input);


//动态获取方法


//  $incubatorInfo = M('regcode')->where("enc_code='".$_REQUEST['bm']."'")->find();


//            $bm=$_REQUEST['bm'];


 //            $appid=$incubatorInfo['appid'];


 //            $mchid=$incubatorInfo['mchid'];


 //            $order = WxPayApi::unifiedOrder($input,$appid,$mchid);//如要动态获取则需修改 WxPayApi方法使其多加两个参数appid,mchid


//一般将appid,mchid配置在配置文件中,WxPayApi会自动加载配置文件中的appid和mchid


 $order = WxPayApi::unifiedOrder($input);


//    dump($order['prepay_id']);


            //获取返回值,输出到前台的data


              $res = $tools->GetJsApiParameters($order);


              $result["data"] = json_decode($res);


              $result["order_num"] = $Out_trade_no;


// 根据上行取得的支付参数请求支付即可


//        dump($data);


              $payData["prepay_id"] = $order['prepay_id'];


              $payData['create_time'] = date("Y-m-d H:i:s");


              M('user_balance_pay')->add($payData);//user_balance_pay表为用户信息表储存要保存的信息


              $result['result'] = '1';


              $result['result_text'] = 'success';


//            $result['bm']=$bm;


              echo json_encode($result);


              return;


}


wechatPayNotify  


function wechatPayNotify()


{


        $xml = $GLOBALS['HTTP_RAW_POST_DATA'];


        if (!empty($xml)) {


            $json = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)));


            $order_number = $json->out_trade_no;


            //        $data["prepay_id"] = $order_number;


//        M('user_balance_pay')->add($data);


            $appPay = M('user_balance_pay')->where('type = 1 and order_num = ' . $order_number)->find();


            if (!empty($appPay)) {


                $appPay["status"] = 1;


                $appPay['update_time'] = date("Y-m-d H:i:s");


                //修改用户支付状态


                M('user_balance_pay')->save($appPay);


                if ($appPay["order_type"] == 1) {


                    $this->payResultToGetMeetingroomKey($appPay["order_id"]);


                    $theOrder = M('view_mroom_apply')->where('id=' . $appPay["order_id"])->find();


                    $this->sendMessage($theOrder["openid"],


                        $theOrder["roomnumber"],


                        substr($theOrder["start_time"], 0, 16) . "-" . substr($theOrder["end_time"], 11, 5),


                        $theOrder["enterprise_name"],


                        $theOrder["name"],


                        $theOrder["mobile"]);


}


}


            $data["result"] = "1";


            $data["result_text"] = "success";


//            echo json_encode($data);


            echo "";


            return;


        }else {


            $data["result"] = "0";


            $data["result_text"] = "fail";


//            echo json_encode($data);


            return;


}


    }


4.常遇错误

1.url未注册

未将发起微信支付页面加入商户平台url注册中

2.appid参数异常

(1)WxPay.Config.php中appid设置错误,或key错误

(2)虽然微信支付并没有涉及key的操作,但是appid需要key进行解析,所以配置文件中四个参数必须都填上

(3)证书错误,重新下载

(4)WxPay.Config.php引用证书路径错误

5.其他

暂无..待改进

1.存储用户支付信息目录(仅作参看)

2..给公众号用户推送模版消息需要服务器ip加入公众号请求白名单,不知道对微信公众号支付有没有影响,暂议.


              SDK下载地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容

  • 关于微信支付 生活中的微信支付 目前我们日常生活中接触得比较多的线上电子支付方式主要有两种,一种是支付宝,另一种就...
    积_渐阅读 3,888评论 3 26
  • 引言 秋高气爽,天气转凉,正是学习工作做的好时候。(~ ̄▽ ̄)~~(~ ̄▽ ̄)~ 我是个phper最近在写微信支付...
    恩就是这个名阅读 7,833评论 2 15
  • 该文仅对于中间这种支付方式有参考价值哟 一、开发背景 在微信公众号中,需要进行微信支付且为微信公众号网页支付。 二...
    英文名叫夏天阅读 1,654评论 0 7
  • 录宋词十首
    秋日私语书笺阅读 294评论 7 5
  • 我们家开家小小寿司店,已经营业两年多了,生意一直不温不火,但是我始终坚信,我们会做得有声有色的!因为我们秉承信念,...
    Mine豆阅读 356评论 0 0