• 小程序微信支付


    实现前布置

    1:下载官方微信支付SDK(‘https://pay.weixin.qq.com/wiki/doc/api/index.html’)

    2:引入开发框架(我写的是微信小程序支付)

    话不多说直接上代码

    3:控制器方法

    public function getPayOrder(){
    try{
    $tools = new JsApiPay();
    // $openId = $tools->GetOpenid();
    $openId = $open_id;
    //②、统一下单
    $input = new WxPayUnifiedOrder();
    $input->SetBody("");
    $input->SetAttach("");
    $input->SetOut_trade_no("");
    $input->SetTotal_fee("");
    $input->SetTime_start(date("YmdHis"));
    $input->SetTime_expire(date("YmdHis", time() + 600));
    $input->SetGoods_tag("");
    $input->SetNotify_url("你的回调方法");
    $input->SetTrade_type("JSAPI");
    $input->SetOpenid("");
    $config = new WxPayConfig();
    $order = WxPayApi::unifiedOrder($config, $input);
    $printf_info = $this->printf_info($order);
    $jsApiParameters = $tools->GetJsApiParameters($order);
    return $jsApiParameters;
    } catch(Exception $e) {
    Log::ERROR(json_encode($e));
    }
    }

    不清除的参数可以查看SDJ的源代码

    4:回调方法
     public function index(Request $request)
    {
        //可以先查看日志
        // file_put_contents('notify.txt', "---------------------------------------- ", FILE_APPEND);
        // $data = file_get_contents('php://input');
        // file_put_contents('notify.txt', '收到异步通知:' . json_encode($data) . " ", FILE_APPEND);

    $testxml = file_get_contents("php://input");
    $jsonxml = json_encode(simplexml_load_string($testxml, 'SimpleXMLElement', LIBXML_NOCDATA));
    $result = json_decode($jsonxml, true);//转成数组,
    //如果成功返回了
    if($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){
    //告诉微信服务器,我已经接收到成功的通知了,你不要再发送了
    echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
    //处理自己的业务逻辑
    }
    }
    5:微信小程序代码
    wx.request({
            url: '请求的地址',
            data:product,
            method:'POST',
            success:res=>{
              wx.hideLoading()
              var data = res.data;
              wx.requestPayment({
                nonceStr: data.nonceStr,
                package: data.package,
                paySign: data.paySign,
                timeStamp: data.timeStamp,
                signType:data.signType,
                success (res) {
                  wx.hideLoading()
                  wx.switchTab({
                    url: '../personal/index/index',
                  })
                },
                fail (err) {
                  wx.showLoading({
                    title: '已取消支付',
                  })
                  wx.hideLoading()
                  wx.switchTab({
                    url: '../personal/index/index',
                  })
                }
              })
            },
            fail:res=>{
              wx.showToast({
                title: '网络异常',
                icon: 'loading',
                duration: 1000
              })
            }
          })



  • 相关阅读:
    电脑使用优化工具方法
    算法练习的网站
    golang 实现链表反转打印
    刷过的算法题
    Symfony2框架实战教程——第六天#Alt:验证码
    Symfony2框架实战教程——第六天:模板重载与翻译
    [Symfony2] 在命令或控制器里跑另一个命令的N种方法
    Symfony2框架实战教程——第五天:KnpMenuBundle创建菜单项+结合Twitter Boostrap3
    Symfony2框架实战教程——第四天#Alt:用FOSUserBundle实现用户注册和登录
    Symfony2框架实战教程——第四天:用HWIOAuthBundle实现第三方登录
  • 原文地址:https://www.cnblogs.com/sunny20/p/15532502.html
Copyright © 2020-2023  润新知