一步叁个坑的应用程式支付,顺丰BSP订单号查询

作者: 关于计算机  发布:2019-09-26

在有的接口的统一筹算中一时候利用了SOAP方式的呼吁,比方顺丰BSP的接口。
自个儿尝试不一致措施的POST格局央求,要么完全诉求不到东西,要么接收到乱码,均以败诉告终。

引言

秋高气爽,天气转凉,正是学习职业做的好时候。(~ ̄▽ ̄)~~(~ ̄▽ ̄)~

自家是个phper目前在写微信支付(APP支付),微信给的法定文书档案而不是很详细也不曾dome之类的代码啥的(对于新手来讲相比较辛劳),本身是新手在此以前也没写过支付,踩了不计其数坑,所以想写篇小说给没写过支付的新手多少个提议。

本着顺丰接口的SOAP央求的着力代码分享如下:

预备专门的学问

那第一呢你得登记个开放平台以及生意人平台的账号吧,注册成功后呢你会接受一封微信里邮件里面有您的商家号等音信,注册那俩账号完你会怀有厂商号,appid,appkey等须要的东西。

 代码如下

支出流程

桑土策动完结后我们来看一下成本的大致流程

商家应用软件应用与微信支付第一的竞相表达:

1.顾客在商家应用程式应用(移动端)中甄选商品提交订单,支付形式采用微信支付。

2.商家应用软件应用(后台)收到客商支出订单,调用微信支付中的集结下单接口。

3.商行应用软件应用(后台)统一下单接口调用成功后,再次来到的数目中有大家须要的prepay_id,按照具名标准再度生成三个具名,然后把那几个重新生成的具名及app需求的数据重返给商家APP应用(移动端)。

4.卖家APP应用(移动端)收到商家APP应用(后台)的数量调起微信支付,客户张开付出

5.厂家应用程式应用(后台)的回调接口会吸收接纳微信发来的付出结果通报

6.商户APP应用(后台)查询付出结果布告

附:1,4是活动端所要做的工作,2,3,5是大家PHP服务端后台要做的6也是,但自身没做,这么些依据事态而定如若须要的话就做

/**
* 发送soap请求
*/
private function _soap()
{
$client = new SoapClient($this->serviceUrl);
$info = new stdClass();
$info->arg0 = $this->xml;
$param = array($info);
$response = $client->__call(“sfexpressService”,$param);
return $response->return ;
}

始于干活

/**
* 拼接出央浼的xml
*/
public function createXml()
{
$xml = ‘
’.$this->user.’,’.$this->passWord.’

手续1由活动端落成

invoice_no.’” />

步骤2.调用同一下单接口:

先要做的是流程中的第二步,调用同一下单接口。官方文书档案里说了恳求的地点与参数,当中有一点是必填参数,有

appid

应用ID 固定值,你申请账号时就给您了

mch_id

厂家号 固定值,你报名账号时就给你了

nonce_str

随便字符串 那些是和煦写的渴求无法擅长三十八个人,参见官方给的[标准][8]

sign

订立大家把这一个签字叫做第一遍签订公约,注意那一个是个坑,得投机写了,官方只给了什么样写的[标准][9]不曾代码,那些就相比蛋疼了。好几个人掉进这几个坑里,写的签名函数不对,老是出错。但决不操心本身在著作的末了会贴出代码里面有签定函数直接调用就足以了。(注意看自个儿写的函数使用准则)

body

物品描述 固定值 商品描述交易字段格式依据不一致的利用场景根据以下格式:APP——需传入应用市镇上的应用程式名字-实际商品名称,天天爱化解-游戏充钱。

out_trade_no

经纪人订单号 大家和煦定义的订单号,三二十一个字符内、可含蓄字母。

total_fee

总金额 这么些正是您要付出的钱数了,由前端重回。注意一下那边的货币单位是分!

spbill_create_ip

极限IP 那么些顾客的IP地址,写个取IP地址的函数一调用就行

notify_url

文告地址 那又是叁个坑,好几个人不亮堂是干嘛的,那是接受微信支付异步布告回调地址用的,通知url必需为直接可访谈的url,不可能引导参数! 也能够那样敞亮,那一个是给微信支付的接口,微信来调用的接口,微信调那接关节炎嘛用啊?便是报告您客户付款成功啦只怕顾客付款战败了,然后你就足以在那一个接口里透过微信给你回来的消息来做逻辑管理了。

trade_type

固定值  写 “应用软件” 因为小编写的是应用软件支付嘛,所以就填应用程式。

好了正是这几个必选参数了,剩下就足以友善挑选是不是要用的参数了依附本人情形而定。

参数选完了就要发送参数了嘛,怎样发呢?

我们来调用wechatAppPay类中的unifiedOrder()函数。

啊哈啥!!!!!!??????

(⊙o⊙)?(⊙o⊙)?(⊙o⊙)?(⊙o⊙)?(⊙o⊙)?

wechatAppPay类???unifiedOrder()函数???

对就那这俩东西,不要离奇,不要心急看最终有代码,有这么些类,有代码的O(∩_∩)O哈哈~,

你只需在您的档期的顺序中加载那个类就能够调用这一个法子了!不要崇拜作者( ╯▽╰)(因为那些类不是本人写的本身也忘了从哪找的了,小编从百度搜的下一场整理的做了些改换╮(╯▽╰)╭ -_-|||-_-|||-_-!好呢好吧好吧没做改动,只是加了点注释而已,感激写那几个类的大神多谢O(∩_∩)O谢谢O(∩_∩)O谢谢)

好了抽完疯了,开是干正事!

大家先来new下wechatAppPay类

$wxappid          = 'wx0000000000000';//应用ID 字符串

$mch_id            = '1000000000';//商户号 字符串

$notify_url        = ' 字符串

$wxkey            = '00000000000000000000000';//那一个是在商贩基本设置的不得了值用来生成签字时保障安全的 字符串

$this->wechatAppPay = new wechatAppPay($wxappid, $mch_id, $notify_url, $wxkey);

调用wechatAppPay类中的unifiedOrder()函数。unifiedOrder()要求的参数是个数组咱们定义为$params

$params                    = array();

$params['body']            = '应用软件-在线支付';      //必填项 商品描述

$params['out_trade_no']    =  time()."$member";  //必填项 自定义的订单号

$params['total_fee']        = ($money*100);      //必填项 订单金额 单位为分所以要*100

$params['trade_type']      = 'APP';              //必填项 交易类型固定写  应用程式

$params['依据自身景况定的值'] = "依据本身情状定的值" //非必填项 依据本身景况定的值 那么些可有好三个可以参见开采文书档案中的参数

$result = $this->wechatAppPay->unifiedOrder( $params );

注:假如您加了$params['依照本身情况定的值'] wechatAppPay类里要做相应的改换,小说的最后有代码,你一看代码就掌握了

方今$result正是我们调用统一下单接口重返的多少了,那个$resutl通过unifiedOrder()函数的管理已经把xml格式造成数组了。$result 里有return_code,return_msg,appid,mch_id,nonce_str,sign,result_code,prepay_id,trade_type。那中间就用二个prepay_id(预付付交易会话ID),其余都不重大了

’;
$this->xml = $xml;
}

步骤2完毕

提示:
1.$this->serviceUrl 顺丰分配的BSP乞求地址,注意是?wsdl的地方
2.$this->user,$this->passWord 便是顺丰分配的ID和校验码
3.回到的return是三个XML的String,你恐怕供给simplexml_load_string来解析。

手续3 把数量重回给商行应用程式应用(移动端)调起支付接口

未来我们要把调用统一下单接口重回的数码$resutl里的多少个值再次回到给移动端

那个值吗?这多少个:

appid

动用ID 这么些是定位的 能够自身写也能够从$resutl里拿 能够让活动端写死 就不用每一次回到了

partnerid

商贩号 那一个也是恒久的 能够友善写也得以从$resutl里拿 能够让活动端写死 就不用每趟回来了

prepayid

预付付交易会话ID 那几个很要紧必须重临给移动端 是必得从$resutl里拿的

package

恢宏字段 能够友善写也足以从$resutl里拿 暂填写固定值"Sign=WXPay"能够让运动端写死 就毫无每一次回到了

noncestr

随机字符串 那些可以团结写也足以从$resutl里拿

timestamp

日子戳 自个儿生成 规范香江时间,时区为东八区注意:部分系统取到的值为飞秒级,须要转移成秒(12个人数字),这里有个坑,ISO端接收的时候好像得强行转会一下,因为重回的是字符串不是数字,还应该有啥三人的数字之类的,我也不太懂,反正正是写的时候唤醒下iOS程序员就行。安卓不知晓。

sign

签名又来三个坑,我们把那几个具名字为做贰回签订合同,不过这些签字不是从$resutl里拿的,而是本身写的,如何写吧,又有坑!因为加入签定的参数值是那么些不驾驭,参数名写不对!不怕笔者有代码!贴给你看!供给参预签订的值有八个!

$sign_array              = array();

$sign_array['appid']    = $wx_result['appid'];    //注意 $sign_array['appid'] 里的参数名必须是appid

$sign_array['partnerid'] = $wx_result['mch_id'];  //注意 $sign_array['partnerid'] 里的参数名必得是partnerid

$sign_array['prepayid']  = $wx_result['prepay_id'];//注意 $sign_array['prepayid'] 里的参数名必需是prepayid

$sign_array['package']  = 'Sign=WXPay';          //注意 $sign_array['package'] 里的参数名必需是package

$sign_array['noncestr']  = $wx_result['nonce_str'];//注意 $sign_array['noncestr'] 里的参数名必需是noncestr

$sign_array['timestamp'] = time();                //注意 $sign_array['timestamp'] 里的参数名必需是timestamp

$sign_two = $this->wechatAppPay->MakeSign($sign_array);//调用wechatAppPay类里的MakeSign()函数生成sign

近年来就足以把重新生成的sign($sign_two)以及其余参数重回给移动端了,一共再次回到四个值,有多少个之能够让前面贰个写死(appid,partnerid,package),其他八个必需由服务器再次来到给移动端。

 

步骤3完毕

初稿来自:

步骤4由活动端完毕

步骤5 回调接口开荒结果通用文告

还记得步骤第22中学咱们设置的$notify_url吗,对当今快要对这么些微信重返到那个接口的多寡开展一密密麻麻的逻辑管理了

合法是这么写的:

支出到位后,微信会把相关支付结果和客商音信发送给商行,商行索要吸取管理,并重临应答。

对后台通告交互时,假使微信收到厂商的答复不是成功或过期,微信认为布告未果,微信会通过自然的宗旨定期重新发起公告,尽恐怕升高通告的成功率,但微信不保障公告最终能成功。 (通告频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)

注意:相同的布告也许会频繁发送给厂商系统。商家系统必须能够正确管理重复的通报。

推荐的做法是,当收到文告实行拍卖时,首先检查对应业务数据的状态,推断该公告是或不是曾经管理过,若无拍卖过再扩充管理,假如拍卖过直接回到结果成功。在对业务数据举行景况检查和管理在此之前,要使用数据锁实行并发调节,以免止函数重入形成的数码错乱。

特别提醒:商家系统对于开垦结果通报的内容自然要做签字验证,制止数据外泄导致出现“假通告”,造成开销损失。

先是来接收数据

$data = $this->wechatAppPay->getNotifyData();//获取数据 用wechatAppPay类里的getNotifyData()方法,这里数据也被getNotifyData()由xml转化成了数组。

接下来官方说要选择数据锁进行并发调整,那一个自家不懂所以没写(假设您懂你会的话请给笔者留言私信告诉笔者,在那多谢了),对数码开展状态检查那几个写了,怎么着写的呢?很简短微信重回的值有好多里边就足以判定result_code(业务结果)和return_code(再次来到状态码)是不是为SUCCESS就足以了代码就不写了。

接下来验签,这几个很要紧因为那是保险数据未有被第三方人为篡改的标准!

怎么验签呢?

把重回的多寡$data里除了sign剩下的值都踏足重新具名大家把此次具名字为做验签具名,验签签字生成后再与$data里的sign比较,要是同样验签通过,不然不通过。这一次签字的参数名与三遍签订协议时的参数名区别,$data数组里叫什么参数名就验签时叫什么参数名。听乱了呢?(~ ̄▽ ̄)~(~ ̄▽ ̄)~不要紧请看代码

//如若$data里有如下参数

$w_sign = array();          //参与验签签字的参数数组

$w_sign['appid']            = $data['appid'];

$w_sign['bank_type']        = $data['bank_type'];

$w_sign['cash_fee']          = $data['cash_fee'];

$w_sign['fee_type']          = $data['fee_type'];

$w_sign['is_subscribe']      = $data['is_subscribe'];

$w_sign['mch_id']            = $data['mch_id'];

$w_sign['nonce_str']        = $data['nonce_str'];

$w_sign['openid']            = $data['openid'];

$w_sign['out_trade_no']      = $data['out_trade_no'];

$w_sign['result_code']      = $data['result_code'];

$w_sign['return_code']      = $data['return_code'];

$w_sign['time_end']          = $data['time_end'];

$w_sign['total_fee']        = $data['total_fee'];

$w_sign['trade_type']        = $data['trade_type'];

$w_sign['transaction_id']    = $data['transaction_id'];

$verify_sign = $this->wechatAppPay->MakeSign($w_sign);//生成验签签字

好了明日假诺你的验签已经经过了收纳里就是你和煦的逻辑处理了

///////////////////////////////////////////////////////

商户应用程式应用(后台)处理逻辑代码

//////////////////////////////////////////////////////

温馨的逻辑管理已经管理完未来,还得告诉微信一下,别再向来发结果通用公告啦,小编曾经接到布告并管理完呀!

$this->wechatAppPay->replyNotify();//厂家管理后一路再次回到给微信参数

步骤5结束

步骤6依照本身情形而定

结束语

迄今微信支付管理到位~(≧▽≦)/~啦啦啦~(≧▽≦)/~啦啦啦~(≧▽≦)/~啦啦啦~(≧▽≦)/~啦啦啦

写的有窘迫的方还请大家多多带领指教!!!给本人留言!!b( ̄▽ ̄)db( ̄▽ ̄)db( ̄▽ ̄)d

还会有谢谢在自家写微信支付地时候 那个被本人问烦了的大神们! !多谢啊~(≧▽≦)/~啦啦啦~(≧▽≦)/~啦啦啦~(≧▽≦)/~啦啦啦O(∩_∩)O哈哈~O(∩_∩)O哈哈~O(∩_∩)O哈哈~<( ̄︶ ̄)><( ̄︶ ̄)><( ̄︶ ̄)>

代码 注:小编不晓得在简书上哪些贴代码,要领会代码的同校能够活动到此地传送门

wechatAppPay类

class wechatAppPay {      //接口API URL前缀    const API_URL_PREFIX = '';    //下单地址U瑞鹰L    const UNIFIEDOENCOREDEXC90_U大切诺基L = "/pay/unifiedorder";    //查询订单UOdysseyL    const O福睿斯DECRUISERQUEOdysseyY_U科雷傲L = "/pay/orderquery";    //关闭订单ULX570L    const CLOSEO陆风X8DE奥迪Q5_UPorsche911L = "/pay/closeorder";    //大伙儿账号ID    private $wxappid;    //商行号    private $mch_id;    //随机字符串    private $nonce_str;    //签名    private $sign;    //商品描述    private $body;    //商家订单号    private $out_trade_no;    //支付总金额    private $total_fee;    //终端IP    private $spbill_create_ip;    //支付结果回调通告地址    private $notify_url;    //交易类型    private $trade_type;    //支付密钥    private $key;    //证书路线    private $SSLCERT_PATH;    private $SSLKEY_PATH;    //全体参数    private $params = array();    public function __construct($wxappid, $mch_id, $notify_url, $key)    {        $this->appid = $wxappid;        $this->mch_id = $mch_id;        $this->notify_url = $notify_url;        $this->key = $key;    }    /**    * 下单方法    * @param  $params 下单参数    */    public function unifiedOrder( $params ){        $this->body = $params['body'];        $this->out_trade_no = $params['out_trade_no'];        $this->total_fee = $params['total_fee'];        $this->trade_type = $params['trade_type'];        $this->nonce_str = $this->genRandomString();        $this->spbill_create_ip = $_SERVER['REMOTE_ADDR'];        $this->params['appid'] = $this->appid;        $this->params['mch_id'] = $this->mch_id;        $this->params['nonce_str'] = $this->nonce_str;        $this->params['body'] = $this->body;        $this->params['out_trade_no'] = $this->out_trade_no;        $this->params['total_fee'] = $this->total_fee;        $this->params['spbill_create_ip'] = $this->spbill_create_ip;        $this->params['notify_url'] = $this->notify_url;        $this->params['trade_type'] = $this->trade_type;                //获取具名数据        $this->sign = $this->MakeSign( $this->params );        $this->params['sign'] = $this->sign;        $xml = $this->data_to_xml($this->params);        $response = $this->postXmlCurl($xml, self::API_URL_PREFIX.self::UNIFIEDORDER_URL);        if( !$response ){            return false;        }        $result = $this->xml_to_data( $response );        if( !empty($result['result_code']) && !empty($result['err_code']) ){            $result['err_msg'] = $this->error_code( $result['err_code'] );        }        return $result;    }    /**    * 查询订单音信    * @param $out_trade_no    订单号    * @return array    */    public function orderQuery( $out_trade_no ){        $this->params['appid'] = $this->appid;        $this->params['mch_id'] = $this->mch_id;        $this->params['nonce_str'] = $this->genRandomString();        $this->params['out_trade_no'] = $out_trade_no;        //获取签字数据        $this->sign = $this->MakeSign( $this->params );        $this->params['sign'] = $this->sign;        $xml = $this->data_to_xml($this->params);        $response = $this->postXmlCurl($xml, self::API_URL_PREFIX.self::ORDERQUERY_URL);        if( !$response ){            return false;        }        $result = $this->xml_to_data( $response );        if( !empty($result['result_code']) && !empty($result['err_code']) ){            $result['err_msg'] = $this->error_code( $result['err_code'] );        }        return $result;    }    /**    * 关闭订单    * @param $out_trade_no    订单号    * @return array    */    public function closeOrder( $out_trade_no ){        $this->params['appid'] = $this->appid;        $this->params['mch_id'] = $this->mch_id;        $this->params['nonce_str'] = $this->genRandomString();        $this->params['out_trade_no'] = $out_trade_no;        //获取签字数据        $this->sign = $this->MakeSign( $this->params );        $this->params['sign'] = $this->sign;        $xml = $this->data_to_xml($this->params);        $response = $this->postXmlCurl($xml, self::API_URL_PREFIX.self::CLOSEORDER_URL);        if( !$response ){            return false;        }        $result = $this->xml_to_data( $response );        return $result;    }    /**    *      * 获取支付结果通报数据    * return array    */    public function getNotifyData(){        //获取通告的数额        $xml = $GLOBALS['HTTP_RAW_POST_DATA'];        $data = array();        if( empty($xml) ){            return false;        }        $data = $this->xml_to_data( $xml );        if( !empty($data['return_code']) ){            if( $data['return_code'] == 'FAIL' ){                return false;            }        }        return $data;    }    /**    * 接收文告成功后应答输出XML数据    * @param string $xml    */    public function replyNotify(){        $data['return_code'] = 'SUCCESS';        $data['return_msg'] = 'OK';        $xml = $this->data_to_xml( $data );        echo $xml;        die();    }    /**      * 生成应用软件端支付参数      * @param  $prepayid  预支付id      */    public function getAppPayParams( $prepayid ){        $data['appid'] = $this->appid;        $data['partnerid'] = $this->mch_id;        $data['prepayid'] = $prepayid;        $data['package'] = 'Sign=WXPay';        $data['noncestr'] = $this->genRandomString();        $data['timestamp'] = time();        $data['sign'] = $this->MakeSign( $data );          return $data;    }    /**    * 生成具名    *  @return 签名    */    public function MakeSign( $params ){        //签名步骤一:按字典序排序数组参数        ksort($params);        $string = $this->ToUrlParams($params);        //签名步骤二:在string后加入KEY        $string = $string . "&key=".$this->key;        //签字步骤三:MD5加密        $string = md5($string);        //签名步骤四:全数字符转为大写        $result = strtoupper($string);        return $result;    }    /**    * 将参数拼接为url: key=value&key=value    * @param  $params    * @return  string    */    public function ToUrlParams( $params ){        $string = '';        if( !empty($params) ){            $array = array();            foreach( $params as $key => $value ){                $array[] = $key.'='.$value;            }            $string = implode("&",$array);        }        return $string;    }    /**    * 输出xml字符    * @param  $params    参数名称    * return  string      重临组装的xml    **/    public function data_to_xml( $params ){        if(!is_array($params)|| count($params) <= 0)        {            return false;        }        $xml = "";

foreach ($params as $key=>$val)

{

if (is_numeric($val)){

$xml.="<".$key.">".$val."";

}else{

$xml.="<".$key.">";

}

}

$xml.="";        return $xml;    }    /**    * 将xml转为array    * @param string $xml    * return array    */    public function xml_to_data($xml){          if(!$xml){            return false;        }        //将XML转为array        //禁止援用外界xml实体        libxml_disable_entity_loader(true);        $data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);                return $data;    }    /**    * 获取皮秒级其余年月戳    */    private static function getMillisecond(){        //获取微秒的光阴戳        $time = explode ( " ", microtime () );        $time = $time[1] . ($time[0] * 1000);        $time2 = explode( ".", $time );        $time = $time2[0];        return $time;    }    /**    * 产生三个点名长度的任意字符串,并再次回到给客户      * @param type $len 发生字符串的长短    * @return string 随机字符串    */    private function genRandomString($len = 32) {        $chars = array(            "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",            "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",            "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",            "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "CR-V",            "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",            "3", "4", "5", "6", "7", "8", "9"        );        $charsLen = count($chars) - 1;        // 将数组打乱        shuffle($chars);        $output = "";        for ($i = 0; $i < $len; $i++) {            $output .= $chars[mt_rand(0, $charsLen)];        }        return $output;    }    /**    * 以post情势提交xml到对应的接口url    *      * @param string $xml  需要post的xml数据    * @param string $url  url    * @param bool $useCert 是不是需求表明,暗中认可无需    * @param int $second  url实践超时时间,暗中认可30s    * @throws WxPayException    */    private function postXmlCurl($xml, $url, $useCert = false, $second = 30){              $ch = curl_init();        //设置超时        curl_setopt($ch, CURLOPT_TIMEOUT, $second);        curl_setopt($ch,CURLOPT_URL, $url);        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);        //设置header        curl_setopt($ch, CURLOPT_HEADE悍马H2, FALSE);        //须求结果为字符串且输出到荧屏上        curl_setopt($ch, CURLOPT_RETURAV4NTRANSFEQX56, TRUE);        if($useCert == true){            //设置证书            //使用证书:cert 与 key 分别属于多少个.pem文件            curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');            //curl_setopt($ch,CURLOPT_SSLCERT, WxPayConfig::SSLCERT_PATH);            curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');            //curl_setopt($ch,CURLOPT_SSLKEY, WxPayConfig::SSLKEY_PATH);        }        //post提交格局        curl_setopt($ch, CURLOPT_POST, TRUE);        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);        //运行curl        $data = curl_exec($ch);        //再次回到结果        if($data){            curl_close($ch);            return $data;        } else {            $error = curl_errno($ch);            curl_close($ch);            return false;        }    }    /**      * 错误代码      * @param  $code      服务器输出的错误代码      * return string      */    public function error_code( $code ){        $errList = array(            'NOAUTH'                =>  '商行未开展此接口权限',            'NOTENOUGH'            =>  '顾客帐号余额不足',            'OEnclaveDELX570NOTEXIST'        =>  '订单号空头支票',            'O奔驰M级DERPAID'            =>  '商行订单已开荒,没有需求另行操作',            'OEscortDERCLOSED'          =>  '当前订单已关闭,不恐怕支付',            'SYSTEMEOdysseyROOdyssey'          =>  '系统错误!系统超时',            'APPID_NOT_EXIST'      =>  '参数中缺少应用程式ID',            'MCHID_NOT_EXIST'      =>  '参数中贫乏MCHID',            'APPID_MCHID_NOT_MATCH' =>  'appid和mch_id不匹配',            'LACK_PARAMS'          =>  '缺乏须求的央浼参数',            'OUT_TRADE_NO_USED'    =>  '同一笔交易不能够一再付给',            'SIGNE瑞鹰ROEvoque'            =>  '参数具名结果不得法',            'XML_FORMAT_E讴歌ZDXRO凯雷德'      =>  'XML格式错误',            'REQUIRE_POST_METHOD'  =>  '未利用post传递参数 ',            'POST_DATA_EMPTY'      =>  'post数据不可能为空',            'NOT_UTF8'              =>  '未选用钦定编码格式',        );          if( array_key_exists( $code , $errList ) ){            return $errList[$code];        }    }}

本文由金沙澳门官网送注册58发布于关于计算机,转载请注明出处:一步叁个坑的应用程式支付,顺丰BSP订单号查询

关键词: