function pay($mchid, $appid, $no, $payurl, $openid, $money, $desc = '美啦啦砸金蛋活动') { //签名参与参数 $parameters = ['partner_trade_no' => $mchid . date('Ymd') . $no, 'mchid' => $mchid, 'mch_appid' => $appid, 'openid' => $openid, 'check_name' => 'NO_CHECK', 'amount' => $money, 'desc' => $desc, 'spbill_create_ip' => '124.172.237.174', 'nonce_str' => createNoncestr()]; $sign = getSign($parameters); //获取签名 $parameters['sign'] = $sign; $xml = arrayToXml($parameters); //生成请求XML return postXmlSSLCurl($xml, $payurl); }
function arrayToXml($data, $rootNodeName = 'data', $xml = null) { if (ini_get('zend.ze1_compatibility_mode') == 1) { ini_set('zend.ze1_compatibility_mode', 0); } if (is_null($xml)) { $xml_str = "<?xml version='1.0' encoding='utf-8'?><{$rootNodeName} />"; $xml = simplexml_load_string($xml_str); } foreach ($data as $key => $value) { if (is_numeric($key)) { $key = "item_" . (string) $key; } $key = preg_replace('/[^a-z]/i', '', $key); if (is_array($value)) { $node = $xml->addChild($key); arrayToXml($value, $rootNodeName, $node); } else { $value = htmlentities($value); $xml->addChild($key, $value); } } return $xml->asXML(); }
/** @param array array to be turned into xml @param depth internal use */ static function toXml($array, $depth = 0) { foreach ($array as $k => $v) { if (is_array($v)) { $v = arrayToXml($v); } $ele[] = str_repeat("\t", $depth) . '<' . $k . '>' . $v . '</' . $k . '>'; } return implode("\n", $ele); }
private function arrayToXml(SimpleXMLElement $xml, array $array) { foreach ($array as $k => $v) { if (is_array($v)) { arrayToXml($xml->addChild($k), $v); } else { $xml->addChild($k, $v); } } return $xml; }
public function alarmnotify() { $post_data = $GLOBALS['HTTP_RAW_POST_DATA']; \Think\Log::record("alarmnotify" . $post_data); $result = xmlToArray($post_data); $resp = true; $respdata["return_code"] = "SUCCESS"; $respdata["return_msg"] = ""; $map["appid"] = $result["appid"]; $map["mch_id"] = $result["mch_id"]; $map["openid"] = $result["openid"]; $map["out_trade_no"] = $result["out_trade_no"]; // while (true) { //alarmnotify和orderpaid调用时序无保证,未将历史订单的支付流水写入订单表就一直循环 $orderdata = M("mall_order_his")->where($map)->order('id DESC')->find(); if ($orderdata["id"] != "") { //已经记录过的订单数据 $map1["openid"] = $orderdata["openid"]; $map1["dcnum"] = $orderdata["out_trade_no"]; //TODO:进行安全校验,修订订单支付状态 $dddata = M("ml_mall_order")->where($map1)->order('id asc')->find(); if ($dddata["statekz"] == "0" || $dddata["statekz"] == "1") { //未支付,设置为已支付,没有记录交易流水的将交易流水写入订单表 M("mall_order")->where($map1)->save(array("statekz" => 1, "transaction_id" => $orderdata["transaction_id"])); } if ($resp == true) { //根据不同的错误设置返回数据 return arrayToXml($respdata); } else { return arrayToXml($respdata); } } else { $order = M("mall_order_his"); /* 保存附件 */ if ($order->create($result) && $order->add()) { $resp = true; } else { $resp = false; $respdata["return_msg"] = "保存订单数据错误"; } } }
/** * 调用api接口 * @param url $apiurl api.muxiangdao.cn/Article/articleList * @param array $param ['status'=>'1','page'=>'2','pageshow'=>'10']; * @param string $format eg:array(arr),object(obj),json;defalut = array */ function get_api($apiurl, $param, $format = 'array') { if (is_array($param)) { $string = '?'; foreach ($param as $key => $val) { $string .= $key . '=' . $val . '&'; } $param = substr($string, 0, -1); } $url = $apiurl . $param; $json = get_url($url); $start = strpos($json, '{'); $end = -1 * (strlen(strrchr($json, '}')) - 1); if ($end) { $json = substr($json, $start, $end); } else { $json = substr($json, $start); } $obj = json_decode($json); $array = object_to_array($obj); $xml = arrayToXml($array); switch ($format) { case 'array': $data = $array; break; case 'arr': $data = $array; break; case 'obj': $data = $obj; break; case 'object': $data = $obj; break; case 'json': $data = $json; break; default: $data = $array; } return $data; }
function arrayToXml($array, &$xml) { foreach ($array as $key => $value) { if (is_array($value)) { if (is_int($key)) { $key = "e"; } $label = $xml->addChild($key); arrayToXml($value, $label); } else { $xml->addChild($key, $value); } } }
/** * Ajax返回 * * @param $data * @param $format (json or xml) * @return default json */ public function ajaxReturn($data, $format = 'json') { $format = strtolower($format); if (empty($format) || $format == 'json') { $rs = json_encode($data); } else { if ($format == 'xml') { $rs = arrayToXml($data); } else { $rs = '不支持的数据格式:' . $format; } } print_r($rs); }