业务系统与API交互方式

5 篇文章 0 订阅
4 篇文章 0 订阅
  1. curl获取
  2. header跳转
    两种交互方式均执行
Created with Raphaël 2.1.0 业务系统 业务系统 API系统 API系统 参数:验证参数及请求参数 验证 跳转或直接返回

Created with Raphaël 2.1.0 业务系统 业务系统 API系统 API系统 参数:验证 验证是否成功 参数:请求 返回业务数据

代码示例:

一、curl获取
业务系统:

    public function test_curl(){
        $time=time();
        $case_id=$_POST['case_id']; //在API中注册的某个用户
        $post_data=['time'=>$time,'secret_key'=>get_secret($time,$case_id),'caseid'=>$case_id];
        $url = "http://api.com/get/test";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        $output = curl_exec($ch);
        curl_close($ch);
    }
    public function get_secret($data,$case_id){
         //根据case_id读取出注册时的随机码
         return sha1($casename.$data.$secret_code);
    }

API系统:

    public function test(){
         $input=input();
         $time = $input['time'];
         $secret_key = get_secret($time, $input['caseid']);
         if (!check_auth($input)) {
            return ['code'=>1,'msg'=>'获取失败','data'=>[]];
         }
         $arr=[];
         //操作
         return $arr;
    }
    public function check_auth($input){
         if(!$input['caseid'])
            return FALSE;
         $config=getConfigId($input['caseid']);
         if($config['pass'])
            return TRUE;        
         $time=$input['time'];
         $secret_key=get_secret($time,$input['caseid']);
         if($input['secret_key']!=$secret_key){
            return FALSE;
         }
        return TRUE;
    }

$output即为获取到的内容

二、header跳转
示例:获取微信的openid
业务系统:

    public funciton get_openid(){
        $input=input();
        $openid=session('openid');
        if(!$openid){
            $msg = $input['msg'];
            if (!$msg) {
                $now_url = 'http://yewu.com/index/index';
                $time = time();
                $token_url = 'http://api.com/weixin/index?redirect_uri=' . urlencode($now_url) . '&caseid=' . $case_id . '&secret_key=' . get_secret($time,$case_id) . '&time=' . $time;
                header("Location: $token_url");
                exit ;
            } else {
                $code = $input['code'];
                if ($code == 1) {
                    return FALSE;
                } else {
                    $openid=$input['openid'];
                }
            }
            session('openid',$openid);
        }
        return $openid;
    }

API系统:

    public function index(){
        //1.验证

        //2.获取openid
        cache($input['secret_key'],$input);
        $this->get_openid($input['secret_key']);
    }

    public function get_openid($state){
        $input = input();
        $state = $state ? : $input['state'];
        $info = cache($state);
        $case_config=getConfigId($info['caseid']);
        $config = array(
            'token' => $case_config['wx_token'], 
            'encodingaeskey' => $case_config['wx_EncodingAESKey'], 
            'appid' => $case_config['wx_Appid'], 
            'appsecret' => $case_config['wx_AppSecret'],
            'site_url'=>$case_config['site_url'],
            'wx_type'=>$case_config['wx_type']
        );
        $W = new Wechat($config,$case_config['site_url']);
        $code = $input['code'];
        if (!$code) {
            $wx_back = $case_config['site_url'] . '/weixin/get_openid';
            $get_openid_url = $W -> WeChat -> getOauthRedirect($wx_back, $state, 'snsapi_base');
            header("Location: $get_openid_url");
            exit ;
        } else {
            $data = $W -> WeChat -> getOauthAccessToken();
            if ($info) {
                $member_info=$this->get_member_info($info['caseid'],$data['unionid'],$data['openid']);
                $nickName=$member_info['nickName']?:'未知';
                $status=$nickName?1:0;
                $avatarUrl=$member_info['avatarUrl']?:'';
                $token_url = $info['redirect_uri'] . '?openid=' . $data['openid'] . '&nickName=' . $nickName.'&avatarUrl='.$avatarUrl.'&status='.$status.'&member_id='.$member_info['id'].'&code=0&msg=操作成功';
                cache($state,null);
                header("Location: $token_url");
                exit ;
            }
        }
    }

———未完待续———

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ScorpionFong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值