zoukankan      html  css  js  c++  java
  • ThinkPHP微信扫码支付接口

    最近折腾微信扫码支付,看了微信官方文档,找了很多网页,发现和文档/demo不匹配,现在自己算是弄出来了(文件名称有所更改),贴出来分享一下

    一.将有用的官方lib文件和使用的相关文件放置到vendor当中

    二.调用同一支付接口

    WechatController

    //调用同一支付接口
    public function native($v_oid='',$v_amount=''){
    ini_set('date.timezone','Asia/Shanghai');
    error_reporting(E_ERROR);
    //添加相关的类文件
    vendor('Wxpay.WxPayApi');
    vendor('Wxpay.log');
    vendor('Wxpay.NativePay');
    //初始化日志
    $logHandler= new CLogFileHandler("../logs/".date('Y-m-d').'.log');
    $log = Log::Init($logHandler, 15);
    //接受订单信息
    if(trim($v_oid)<>"") //判断是否有传递订单号
    {
    $v_oid = trim($v_oid);
    }
    else
    {
    $this->error('订单号为空',U('User/index'));
    exit;
    }

    $v_amount = trim($v_amount*100); //支付金额

    //调用同一支付接口
    $notify = new NativePay();
    $input = new WxPayUnifiedOrder();
    //商品描述----------------------------需要参数传递/统一信息
    $input->SetBody("商品描述位置");
    //附加数据
    $input->SetAttach("附加数据位置");
    //商户订单号
    $input->SetOut_trade_no($v_oid);
    //总金额
    $input->SetTotal_fee($v_amount);
    //开始时间
    $input->SetTime_start(date("YmdHis"));
    //结束时间
    $input->SetTime_expire(date("YmdHis", time() + 600));
    //商品标记
    $input->SetGoods_tag("商品标记位置");
    //异步通知地址,不能携带任何参数
    $input->SetNotify_url(U('NotifyProcess'));
    //交易类型
    $input->SetTrade_type("NATIVE");
    //商品id
    $input->SetProduct_id("123456789");
    //获取同一支付接口结果
    $result = $notify->GetPayUrl($input);
    $url2 = $result["code_url"];

    $this->assign('data',urlencode($url2));
    $this->assign('v_oid',$v_oid); $this->assign('v_amount',$v_amount/100); $this->display();}三.生成二维码
    三.微信支付生成二维码
    public function qrcode(){
    error_reporting(E_ERROR);
    vendor('Wxpay.phpqrcode.phpqrcode');
    $url = $_GET["data"];
    QRcode::png($url);
    }

    四.异步处理
    具体处理流程和方式按个人需求

    //微信异步查询订单机制
    public function Queryorder($transaction_id)
    {
    $input = new WxPayOrderQuery();
    $input->SetTransaction_id($transaction_id);
    $result = WxPayApi::orderQuery($input);
    Log::DEBUG("query:" . json_encode($result));
    if(array_key_exists("return_code", $result)
    && array_key_exists("result_code", $result)
    && $result["return_code"] == "SUCCESS"
    && $result["result_code"] == "SUCCESS")
    {
    return true;
    }
    return false;
    }

    五.再来个form表单展示二维码

    <form action="" method="post" id="myForm-table">
    <h2>订单信息</h2>
    <div class="orderNumber">
    <p class="a">订单号:"{$v_oid}"</p>
    <p class="b">
    <span class="left">应付金额:<strong><em>{$v_amount}</em>元</strong></span>
    <span class="right">付款后,飞行之翼客服会与您联系,如有问题请咨询24小时飞行热线 400-700-2016</span>
    </p>
    </div>
    <h2>微信支付</h2>
    <img src="{:U('qrcode')}?data={$data}" alt="微信扫码">
    <div class="order-submit"><a href="javascript:history.go(-1);" class="submitOrder Order">返回其他支付方式</a></div>
    </form>



    成功的图就不附上了,这是我遇到的问题,由于要重构,所以比较乱,无效代码也比较多,需要整理,记录下来,分享一二
     


  • 相关阅读:
    AngularJS之ng-repeat指令
    AngularJS之ng-controller指令
    HttpClient通过Post上传文件
    response.setHeader()的用法
    response 设置响应头的常用几种方法
    理解HTTP session原理及应用
    mysqldump 利用rr隔离实现一致性备份
    Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用
    AngularJS之ng-model指令
    AngularJS之ng-app指令
  • 原文地址:https://www.cnblogs.com/hongxinlaoking/p/5330006.html
Copyright © 2011-2022 走看看