1

以前に別の開発者と行ったプロジェクトに取り組んでいます。このプロジェクトは PHP Yii フレームワークに基づいており、モバイル側は Android であり、Web サイトで提供される Web サービスから JSON メッセージを取得します。

この Web サービス関数「getStamp」に行き詰まっています。

JSON 応答メッセージが何であるかわかりません。「stampID」、「stampName」、「stampImg」に保持する文字列の値は何ですか。

これらは私が持っている情報です:

リクエスト パラメータ:

  • キオスキッド
  • アクセストークン
  • タギッド
  • イベントID
  • チェック = 0 または 1

失敗した応答の場合:

  • ステータス = 0
  • メッセージ = エラー メッセージ

成功応答の場合:

  • ステータス = 1
  • tappedStamp = デバイスをタップした後に取得するスタンプ ID (チェックが 1 でない場合)
  • message = 取得したスタンプのメッセージ (チェックが 1 でない場合)
  • CollectedStamp = 集めたスタンプIDの一覧

「getStamp」Web サービスを使用して、ユーザーが収集したスタンプの数を確認する場合は、「checking」に 1 を渡します。その Web サービスを使用してキオスクのスタンプを収集する場合の場合、「checking」を 0 として渡します。

「collectedStamp」と「tappedStamp」はJSON配列のJSONオブジェクト名であるというコードと説明から私が理解している限り

これらの 3 つの要素を知る必要があります (名前がランダムで本物ではないところから取得すると思います。何が必要かを説明するために作成します)

'stampID'、'stampName'、'stampImg'

{ "collectedStamp" : [ { "stampID" : "1",
        "stampName" : "stamp1",
        "stampImg": "stamp1.png"
      },
       { "stampID" : "2",
        "stampName" : "stamp2",
        "stampImg": "stamp2.png"
      },
    ],
  "status" : "1"
}


{ "tappedStamp" : [ { "stampID" : "1",
        "stampName" : "stamp1",
        "stampImg": "stamp1.png"
      },
       { "stampID" : "2",
        "stampName" : "stamp2",
        "stampImg": "stamp2.png"
      },
    ],
  "status" : "1"
}

Android の実装では、この投稿で提供したものと同じコードを使用する可能性が高いです。

JSON の結果を ListView に取得する際のエラー

そのリンクのWebサービス関数に表示されている場合、これが見つかります

        $list = array();
        foreach($events as $row){
            $list[] = array('id'=>$row->id, 'name'=>$row->eventname);
        }
        $response['status'] = '1';
        $response['list'] = $list;
    }

これは、JSON 応答 ['list'] に 'id' および 'name' オブジェクトが含まれていることを意味します

これらは、ListView Adapter内に追加する文字列値です

この Web サービスの 'id' と 'name' に相当するものを知る必要があります

getStamp() Web サービス関数:

public function actionGetStamp(){
    if(isset($_POST['kioskid']) && isset($_POST['accesstoken']) && isset($_POST['tagid']) && isset($_POST['eventid']) && isset($_POST['checking'])){
        $response = array();

        $kiosk = Kiosk::model()->findByAttributes(array('kioskid'=>$_POST['kioskid'], 'accesstoken'=>$_POST['accesstoken']));
        if(($kiosk === null || $kiosk->eventid != $_POST['eventid']) && $_POST['accesstoken'] != 'REPOST_SYNC'){
            $response['status'] = '0';
            $response['message'] = 'Invalid Kiosk';
        } else {
            $eventStation = EventStation::model()->findByAttributes(array('eventid'=>$_POST['eventid'],'deviceid'=>$_POST['kioskid']));
            if($eventStation === null){
                $response['status'] = '0';
                $response['message'] = 'Invalid Kiosk';
            } else {
                $tag = EventTag::model()->findByAttributes(array('tagid'=>$_POST['tagid'], 'eventid'=>$eventStation->eventid, 'status'=>'A'));
                if($tag === null || $tag->joinon == null){
                    $response['status'] = '0';
                    $response['message'] = 'Tag is not registered yet.';
                } else {
                    $sql = 'SELECT es.id, (CASE WHEN esc.stampid IS NULL THEN 0 ELSE 1 END) collected,
                            (CASE WHEN es.kioskid = :kioskid THEN 1 ELSE 0 END) tapped,
                            es.message
                            FROM tap_event_stamp es
                            LEFT JOIN tap_event_stamp_collection esc ON es.id = esc.stampid and esc.tagid = :tagid
                            WHERE es.eventid = :eventid AND es.isdeleted = 0
                            GROUP BY es.id ORDER BY es.id
                            ';
                    $params = array(':eventid'=>$_POST['eventid'], ':kioskid'=>$eventStation->id, ':tagid'=>$tag->id);
                    $stamps = Yii::app()->db->createCommand($sql)->queryAll(true, $params);
                    if(sizeof($stamps) == 0){
                        $response['status'] = '0';
                        $response['message'] = 'Invalid Request';
                    } else {
                        $feature = EventFeatures::model()->findByAttributes(array('eventid'=>$_POST['eventid'],'featureid'=>3));
                        if($feature === null){
                            $response['status'] = '0';
                            $response['message'] = 'Invalid Request';
                        } else {
                            $info = json_decode($feature->info, true);
                            $random = false;
                            if(isset($info['STAMPSEQ'])){
                                $random = $info['STAMPSEQ'] == 'R';
                            }
                            $collected = array();
                            $response['status'] = $_POST['checking'] == 1 ? '1' : '0';
                            $duplicate = false;
                            foreach($stamps as $stamp){
                                if ($stamp['tapped'] == 1 && $_POST['checking'] != 1){
                                    $response['tappedStamp'] = $stamp['id'];
                                    $response['message'] = $stamp['message'];
                                    $response['status'] = '1';
                                    $duplicate = $stamp['collected'] == 1;
                                } elseif($stamp['collected'] == 1){
                                    $collected[] = $stamp['id'];
                                    continue;
                                } elseif(!$random && $_POST['checking'] != 1){
                                    if( !isset($response['tappedStamp']) ){
                                        $response['message'] = 'You have tapped a wrong kiosk';
                                    }
                                    break;
                                }
                            }
                            if( $response['status'] == '1' ){
                                $response['collectedStamp'] = $collected;
                                if(!$duplicate && $_POST['checking'] != 1){
                                    $newRecord = new StampCollection();
                                    $newRecord->eventid = $_POST['eventid'];
                                    $newRecord->tagid = $tag->id;
                                    $newRecord->kioskid = $eventStation->id;
                                    $newRecord->stampid = $response['tappedStamp'];
                                    $newRecord->collectedon = time();
                                    $newRecord->save();
                                }
                            }
                            if( $response['status'] == '1' && Yii::app()->params['isOffline'] && $_POST['checking'] != 1){
                                $params = array();
                                $params['tagid'] = $_POST['tagid'];
                                $params['eventid'] = $_POST['eventid'];
                                $params['kioskid'] = $_POST['kioskid'];
                                $params['accesstoken'] = 'REPOST_SYNC';

                                $model = new PendingRequest();
                                $model->request_url = '/ws/getStamp';
                                $model->request_param = json_encode($params);
                                $model->createdon = time();
                                $model->issent = 0;
                                $model->save();
                            }
                        }
                    }
                }
            }
        }
        $this->_sendResponse(200, CJSON::encode($response));
    } else {
        $this->_sendResponse(400);
    }
}

もう 1 つの質問:

ブラウザから Web サービスをチェックしてパラメータを渡すにはどうすればよいですか (このプロジェクトは Yii フレームワークを使用しています)。したがって、ブラウザからでも JSON メッセージを取得できます。

アップデート:

「POSTMAN REST Client」を使用した後、このメッセージが表示されました

チェック = 1 の場合

{"status":"1","collectedStamp":[]}

チェック = 0 の場合

これは私が得たHTMLコードです

https://drive.google.com/file/d/0B0rJZJK8qFz9MENzcWxhU3NPalk/edit?usp=sharing

4

0 に答える 0