微信开发Thinkphp3.2整合微信支付
白羽 2019-05-23 来源 :网络 阅读 2063 评论 0

摘要:本文将带你了解微信开发Thinkphp3.2整合微信支付,希望本文对大家学微信有所帮助。

    本文将带你了解微信开发Thinkphp3.2整合微信支付,希望本文对大家学微信有所帮助。


微信开发Thinkphp3.2整合微信支付



    业务场景:
   
    用户在网页上选定商品,然后生成QRcode,用户扫后付款返回信息给server。
   
    用到的支付模式:
   
    NATIVE模式二
   
    服务端信息:
   
    PHP,Thinkphp3.2框架
   
     
   
    1.文件整合
    首先把官方提供的demo下下来:
   
   
   
    下下来以后   把demo里面的WxPayPubHelper整个文件夹放到Thinkphp项目里面Vendor文件夹中,放置之后项目就可以通过Vendor(""WxPayPubHelper.文件名"")来调用里面的php文件(.php不需要加)
   
    2.代码整合
    模式二主要用到的是wxpay文件夹里面的native_dynamic_qrcode.php,notify_url.php和qrcode.js三个。
   
    在配置文件中配置要用到的信息,包括微信号ID、微信号SECRET、商户ID、商户支付秘钥、证书的url路径、异步通知的URL
   
   
   
      要注意的是:异步URL地址必须是PATHINFO模式,如果是参数模式的话会调用不了。同时还要在微信号上微信支付->开发配置->支付配置中填好相同的NOTIFY_URL
   
   
   
    然后可以开始写自己的代码了
   
      建一个新的controller(或者整合到你自己的controller里面,在这里我建立一个新的Pay模块里面用IndexController)
   
    public function index(){          Vendor(""WxPayPubHelper.WxPayPubHelper"");        //使用统一支付接口        $unifiedOrder = new   \UnifiedOrder_pub();                  //设置统一支付接口参数          //设置必填参数          //appid已填,商户无需重复填写          //mch_id已填,商户无需重复填写          //noncestr已填,商户无需重复填写          //spbill_create_ip已填,商户无需重复填写          //sign已填,商户无需重复填写          $unifiedOrder->setParameter(""body"",""贡献一分钱"");//商品描述        //自定义订单号,此处仅作举例        $timeStamp = time();        $out_trade_no =   C('wxappid').""$timeStamp"";          $unifiedOrder->setParameter(""out_trade_no"",""$out_trade_no"");//商户订单号         $unifiedOrder->setParameter(""total_fee"",""1"");//总金额          $unifiedOrder->setParameter(""notify_url"",C('NOTIFY_URL'));//通知地址         //var_dump(urlencode(C('NOTIFY_URL')));          $unifiedOrder->setParameter(""trade_type"",""NATIVE"");//交易类型        //非必填参数,商户可根据实际情况选填          //$unifiedOrder->setParameter(""sub_mch_id"",""XXXX"");//子商户号            //$unifiedOrder->setParameter(""device_info"",""XXXX"");//设备号           //$unifiedOrder->setParameter(""attach"",""XXXX"");//附加数据         //$unifiedOrder->setParameter(""time_start"",""XXXX"");//交易起始时间          //$unifiedOrder->setParameter(""time_expire"",""XXXX"");//交易结束时间           //$unifiedOrder->setParameter(""goods_tag"",""XXXX"");//商品标记           //$unifiedOrder->setParameter(""openid"",""XXXX"");//用户标识          $unifiedOrder->setParameter(""product_id"",""1101"");//商品ID                //获取统一支付接口结果        $unifiedOrderResult =   $unifiedOrder->getResult();          var_dump($unifiedOrderResult);          //商户根据实际情况设置相应的处理流程        if   ($unifiedOrderResult[""return_code""] ==   ""FAIL"")           {            //商户自行增加处理流程            echo   ""通信出错:"".$unifiedOrderResult['return_msg']."""";        }        elseif($unifiedOrderResult[""result_code""]   == ""FAIL"")          {            //商户自行增加处理流程            echo ""错误代码:"".$unifiedOrderResult['err_code']."""";            echo   ""错误代码描述:"".$unifiedOrderResult['err_code_des']."""";        }          elseif($unifiedOrderResult[""code_url""] !=   NULL)        {            //从统一支付接口获取到code_url            $code_url =   $unifiedOrderResult[""code_url""];            //商户自行增加处理流程            //......              $this->assign('code_url',$code_url);        }          $this->assign(""unifiedOrderResult"",$unifiedOrderResult);          $this->theme('default')->display('Pay/index');    }
     
   
    然后加上以上的代码,代码直接从demo里面抽出来的,主要就是通过Vender读到helper, 然后是前端部分:
   
     
   
    订单号:
   
     
    "" type=""hidden"">查询订单状态
   
     
    "" type=""hidden"">
    申请退款
   
    返回首页
   
     
   
    JS生成QR部分也是用demo的代码,主要就是督导qrcode.js然后接受到服务端返回的信息把QRcode生成出来,其他查询订单和退款功能这里不做演示了。
   
    到这里就可以用http//你的网址/index.php/pay/index/index 访问看到你的支付QRcode了
   
     
   
    当然还没结束,用户支付成功后要获取到微信服务端的异步通知信息,在IndexController中加入一个notify方法:
   
    public function notify(){          //include_once(""./log_.php"");        //echo 'access';        Vendor(""WxPayPubHelper.WxPayPubHelper"");        //使用通用通知接口        $notify = new \Notify_pub();        //存储微信的回调        $xml =   $GLOBALS['HTTP_RAW_POST_DATA'];           $notify->saveData($xml);                //验证签名,并回应微信。        //对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,        //微信会通过一定的策略(如30分钟共8次)定期重新发起通知,        //尽可能提高通知的成功率,但微信不保证通知最终能成功。        // $this->log_result(""【checkSign】:\n"".$notify->checkSign().""\n"");        if($notify->checkSign() ==   FALSE){              $notify->setReturnParameter(""return_code"",""FAIL"");//返回状态码              $notify->setReturnParameter(""return_msg"",""签名失败"");//返回信息        }else{              $notify->setReturnParameter(""return_code"",""SUCCESS"");//设置返回码        }        $returnXml =   $notify->returnXml();        echo   $returnXml;        //   $this->log_result(""【返回回调信息】:\n"".$returnXml.""\n"");          //==商户根据实际情况设置相应的处理流程,此处仅作举例=======                //以log文件形式记录回调信息        $this->log_result(""【接收到的notify通知】:\n"".$xml.""\n"");        if($notify->checkSign() ==   TRUE)        {            if   ($notify->data[""return_code""] ==   ""FAIL"") {                  //此处应该更新一下订单状态,商户自行增删操作                  $this->log_result(""【通信出错】:\n"".$xml.""\n"");            }              elseif($notify->data[""result_code""] ==   ""FAIL""){                  //此处应该更新一下订单状态,商户自行增删操作                  $this->log_result(""【业务出错】:\n"".$xml.""\n"");            }            else{                //此处应该更新一下订单状态,商户自行增删操作                $this->log_result(""【支付成功】:\n"".$xml.""\n"");            }                        //商户自行增加处理流程,            //例如:更新订单状态            //例如:数据库操作            //例如:推送支付完成信息        }      }
     
   
    确认 //你的网址/index.php/pay/index/notify   可以访问到,这个地址就是前面提及到的NOTIFY_URL了,要跟微信支付配置保持一致。然后到这里为止就成功了,访问index出现QRcode然后用户扫描支付成功   微信服务端调用notify,还有一点要注意的是微信服务端异步调用notify在没接受到SUCCESS返回前都是继续发(目前设定是半小时8次),所以记得要返回SUCCESS哟(给出的代码已经返回了),然后最好就做好重复notify的冲突处理,例如判断订单是否被处理过了,避免订单被重复刷新。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之微信频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程