仿窝窝收款

###最近公司接了一个项目,其中一个功能就是三码合一支付。
本来想到要直接拒绝的。但是IOS开发说可行。我当时是很不了解的。在网上找了半天也都是一些没什么用的文档(也可能是自己没有找准方向) 所以内心的拒绝的。不过最后还是动手开发了。哈哈哈。

1.微信支付。首先要开通JSAPI支付。话不多说。直接上代码

public function getParameters($order_sn)
    {
        // 获取配置项
        $config = $this->config;
        // 如果没有get参数没有code;则重定向去获取openid;
        if (!isset($_GET['code'])) {
            // 获取订单号
            // 返回的url
            $redirect_uri = U('api/Pay/pays', '', '', true);
            // $redirect_uri = 'http://earlyqin.bonnidee.cn/index.php?m=home&c=Weixinpay&a=pay';
            $redirect_uri = urlencode($redirect_uri);
            $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $config['APPID'] . '&redirect_uri=' . $redirect_uri . '&response_type=code&scope=snsapi_base&state=' . $order_sn . '#wechat_redirect';
            header("Location: {$url}");exit;
            // redirect($url);
        } else {
            // 如果有code参数;则表示获取到openid
            $code = I('get.code');
            // 取出订单号
            $out_trade_no = I('get.state');
            if (empty($out_trade_no)) {
                $out_trade_no = $order_sn;
            }

            
            $resultGoods = M('pays')->where("order_sn='$out_trade_no'")->find();
            
            // 组合获取prepay_id的url
            $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $config['APPID'] . '&secret=' . $config['APPSECRET'] . '&code=' . $code . '&grant_type=authorization_code';
            $result = $this->getJson($url);
            // var_dump($result);exit;
            $openid = $result['openid'];
            // $body = $goods_result['goods_name'];
            $body = '测试二维码';
            
            //微信以分为单位
            $total_fee = $resultGoods['amount'] * 100;
            
            
            $out_trade_no = $resultGoods['order_sn'];

            // 订单数据  请根据订单号out_trade_no 从数据库中查出实际的body、total_fee、out_trade_no、product_id
            $data = array(
                'body' => $body,// 商品描述(需要根据自己的业务修改)
                'total_fee' => $total_fee,// 订单金额  以(分)为单位(需要根据自己的业务修改)
                'out_trade_no' => $out_trade_no,// 订单号(需要根据自己的业务修改)
                'trade_type' => 'JSAPI',// JSAPI公众号支付
                'openid' => $openid,// 获取到的openid
                'appid' => $config['APPID'],
                'mch_id' => $config['MCHID'],
                'nonce_str' => md5(time() . '!@#$%^&*()_+'),
                'spbill_create_ip' => '192.168.0.1',
                'notify_url' => $config['NOTIFY_URL']

            );


            // 生成签名
            $sign = $this->makeSign($data);
            $data['sign'] = $sign;
            $xml = $this->toXml($data);
            $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';//接收xml数据的文件
            $header[] = "Content-type: text/xml,charset:utf-8";//定义content-type为xml,注意是数组
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 兼容本地没有指定curl.cainfo路径的错误
            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
            $response = curl_exec($ch);

            if (curl_errno($ch)) {
                // 显示报错信息;终止继续执行
                die(curl_error($ch));
            }

            curl_close($ch);
            $result = $this->toArray($response);
            // 显示错误信息
            if ($result['return_code'] == 'FAIL') {
                die($result['return_msg']);
            }

            // 组合jssdk需要用到的数据
            $datas = array(
                'appId' => $config['APPID'], //appid
                'timeStamp' => strval(time()), //时间戳
                'nonceStr' => md5(time() . '!@#$%^&*()_+'),// 随机字符串
                'package' => 'prepay_id=' . $result['prepay_id'],// 预支付交易会话标识
                'signType' => 'MD5'//加密方式
            );
            // 生成签名
            $datas['paySign'] = $this->makeSign($datas);
            return $datas;
        }
    }

返回值就可以直接用js掉漆支付了。至于中介调用的一些函数微信文档SDK里面都有。我就不复制了

2.然后就是支付宝支付了。我在探索了所有支付宝支付的条件之后选择了手机网页支付。(其他的还没试过,喜探索的小伙伴可以多试试)下面是代码:

//手机网站
    public function alipay(){
        $order_sn = 'ST'.time().rand(1000,9999);
        $total_fee = $_REQUEST['amount'] ? $_REQUEST['amount'] : 0.1;
        require_once 'AopClient.php';
        $aop = new AopClient ();
        $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
        $aop->appId = $this->appId_app;
        $aop->rsaPrivateKey = $this->rsaPrivateKey_app;
        $aop->alipayrsaPublicKey=$this->aliPayRsaPublicKey_app;
        $aop->charset='UTF-8';
        $aop->format='json';
        $aop->signType='RSA2';
        require_once 'request/AlipayTradeWapPayRequest.php';
        $request = new AlipayTradeWapPayRequest ();
        $arr['body'] = '云聪支付';
        $arr['subject'] = "云聪支付";
        $arr['out_trade_no'] = $order_sn;
        $arr['timeout_express'] = '30m';
        $arr['total_amount'] = $total_fee;
        $arr['product_code'] = 'QUICK_WAP_WAY';
        $json = json_encode($arr);
        $request->setNotifyUrl($this->notifyurl);
        $request->setBizContent($json);
        $response = $aop->pageExecute($request);
        echo $response;
    }

3.至于第三个码就是公司自己的二维码了。哈哈。自己创建的钱包,自己创建的扣款机制。代码对于自己来说就可以为所欲为了。
至于自己怎么区分是微信,支付宝。还是自己的APP扫码。用这个 HTTP_USER_AGENT。分分钟可以百度出来。哈哈。就这样一个模仿的窝窝收款就出来了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值