partnerid = $partnerid; } function setAmount($amount) { if (is_numeric($amount) or $amount == 'endless') { $this->amount = $amount; return true; } else return false; } function setCountry($country) { if (is_numeric($country)) { $this->country = $country; return true; } else return false; } function setReportURL($report) { $this->report = $report; } function setServicenumber($servicenumber) { $this->servicenumber = $servicenumber; } function setPaycode($paycode) { $this->paycode = $paycode; } function getPayInfo() { $result = $this->sendToHost('www.mollie.nl', '/xml/micropayment/', 'a=fetch'. '&partnerid='.urlencode($this->partnerid). '&amount='.urlencode($this->amount). '&servicenumber='.urlencode($this->servicenumber). '&country='.urlencode($this->country). '&report='.urlencode($this->report)); if(!$result) return false; list($headers, $xml) = preg_split("/(\r?\n){2}/", $result, 2); $data = XML_unserialize($xml); $this->servicenumber = $data['response']['item']['servicenumber']; $this->paycode = $data['response']['item']['paycode']; $this->amount = $data['response']['item']['amount']; $this->duration = $data['response']['item']['duration']; $this->mode = $data['response']['item']['mode']; $this->costperminute = $data['response']['item']['costperminute']; $this->costpercall = $data['response']['item']['costpercall']; $this->currency = $data['response']['item']['currency']; return true; } function checkPayment() { $result = $this->sendToHost('www.mollie.nl', '/xml/micropayment/', 'a=check'. '&servicenumber='.urlencode($this->servicenumber). '&paycode='.urlencode($this->paycode)); if(!$result) return false; list($headers, $xml) = preg_split("/(\r?\n){2}/", $result, 2); $data = XML_unserialize($xml); $this->payed = ($data['response']['item']['payed'] == 'true'); $this->durationdone = $data['response']['item']['durationdone']; $this->durationleft = $data['response']['item']['durationleft']; $this->paystatus = $data['response']['item']['paystatus']; $this->amount = $data['response']['item']['amount']; $this->duration = $data['response']['item']['duration']; $this->mode = $data['response']['item']['mode']; $this->costperminute = $data['response']['item']['costperminute']; $this->costpercall = $data['response']['item']['costpercall']; $this->currency = $data['response']['item']['currency']; return $this->payed; } function sendToHost($host,$path,$data) { $fp = @fsockopen($host,80); if ($fp) { @fputs($fp, "POST $path HTTP/1.0\n"); @fputs($fp, "Host: $host\n"); @fputs($fp, "Content-type: application/x-www-form-urlencoded\n"); @fputs($fp, "Content-length: " . strlen($data) . "\n"); @fputs($fp, "Connection: close\n\n"); @fputs($fp, $data); while (!feof($fp)) $buf .= fgets($fp,128); fclose($fp); } return $buf; } } function & XML_unserialize(&$xml){ $xml_parser = &new XML(); $data = &$xml_parser->parse($xml); $xml_parser->destruct(); return $data; } function & XML_serialize(&$data, $level = 0, $prior_key = NULL){ if($level == 0){ ob_start(); echo '\n"; elseif(!is_array($value)) echo '>',htmlspecialchars($value),"\n"; else echo ">\n",XML_serialize($value, $level+1),str_repeat("\t", $level),"\n"; } reset($data); if($level == 0){ $str = &ob_get_contents(); ob_end_clean(); return $str; } } class XML{ var $parser; var $document; var $parent; var $stack; var $last_opened_tag; function XML(){ $this->parser = &xml_parser_create(); xml_parser_set_option(&$this->parser, XML_OPTION_CASE_FOLDING, false); xml_set_object(&$this->parser, &$this); xml_set_element_handler(&$this->parser, 'open','close'); xml_set_character_data_handler(&$this->parser, 'data'); } function destruct(){ xml_parser_free(&$this->parser); } function & parse(&$data){ $this->document = array(); $this->stack = array(); $this->parent = &$this->document; return xml_parse(&$this->parser, &$data, true) ? $this->document : NULL; } function open(&$parser, $tag, $attributes){ $this->data = ''; #stores temporary cdata $this->last_opened_tag = $tag; if(is_array($this->parent) and array_key_exists($tag,$this->parent)){ if(is_array($this->parent[$tag]) and array_key_exists(0,$this->parent[$tag])){ $key = count_numeric_items($this->parent[$tag]); } else { if(array_key_exists("$tag attr",$this->parent)){ $arr = array('0 attr'=>&$this->parent["$tag attr"], &$this->parent[$tag]); unset($this->parent["$tag attr"]); } else { $arr = array(&$this->parent[$tag]); } $this->parent[$tag] = &$arr; $key = 1; } $this->parent = &$this->parent[$tag]; } else { $key = $tag; } if($attributes) $this->parent["$key attr"] = $attributes; $this->parent = &$this->parent[$key]; $this->stack[] = &$this->parent; } function data(&$parser, $data){ if($this->last_opened_tag != NULL) $this->data .= $data; } function close(&$parser, $tag){ if($this->last_opened_tag == $tag){ $this->parent = $this->data; $this->last_opened_tag = NULL; } array_pop($this->stack); if($this->stack) $this->parent = &$this->stack[count($this->stack)-1]; } } function count_numeric_items(&$array){ return is_array($array) ? count(array_filter(array_keys($array), 'is_numeric')) : 0; } ?>