这个付款是什么意思 我用京东货到付款微信支付付了

最近有啥趣事?任天堂官方发布最新游戏主机 Nintendo Switch宣传视频?老罗发布新机并...
Touch Bar很让人惊艳,以致于很多更新都被Touch Bar的光辉遮挡了。
无论是 Mac 老用户还是尚未接触 Mac 电脑的果粉,这都会是一场值得关注的发布会。
代码显示,新MacBook Pro触摸屏由一个单独的ARM处理器驱动。
苹果对传统接口一个不留的做法,还是太过激进了。
我们看到,从显微镜下iPhone 7的细节真的做得很不错~
如果你很容易使电脑发生意外,这就是个问题了。
如果比例真那么高,那苹果得偷着乐~
不管距离多远,双胞胎之间都有着神秘的心灵感应,当其中一方发生危险的时候,另外一方...
近日通过更新,游戏开发商Brooklands New Media旗下的冒险解谜游戏《Rok》终于完成了...
在任何信息都可以做成 QR 码扫一扫读取的现在,相信很多年轻一族们也会把自己的 SNS、...
已经沉寂了一段时间的手游厂商 Double Coconut 本周终于强势回归,接连将旗下《平行梦...
相信不少人年轻时都怀揣着一个足球梦,即便是现在,深夜看球似乎已经成为了某些人生活...
《维京:射手征途》是一款画风清新的横版通关类手游,游戏当中所涉及到的背景与情节也...
现在传播正能量已经是主旋律,但是游戏开发商Gambitious就偏偏要反其道而行之。
又一条产品线将和我们告别,苹果不制造独立显示屏了。
Griffin公司推出了售价$ 34.99的BreakSafe,带来了MagSafe的安全功能。
配备Thunderbolt 3(Type-C)接口的 MacBook Pro 一经发布,贝尔金也推出了一个 Thund...
想要为其它设备提供更好兼容性的话,一款转换器是必不可少的。
除了重点介绍重新设计的 MacBook Pro 之外,苹果还展示和推广了一款来自 LG 公司的外...
目前仍不清楚该项目停止的具体原因,也许可能是因为开发团队无法完成目标。
考虑到10月份剩下的天数已经不多了,AirPods会跳票吗?
告别多条数据线的杂乱,自带多款转接头的富基仕PowerGo移动电源于今日(10月26日)正...
付款了这是什么意思?
注册时间 最后登录
在线时间398 小时 UID
主题帖子人气
红苹果, 积分 278, 距离下一级还需 222 积分
IMG_0494_副本.png (58.91 KB, 下载次数: 0)
15:25 上传
苹果居然可以微信支付,省去了网银支付的麻烦
注册时间 最后登录
在线时间7 小时 UID
主题帖子人气
你是W多少开头的?我58
注册时间 最后登录
在线时间398 小时 UID
主题帖子人气
你是W多少开头的?我58
这个是什么意思
注册时间 最后登录
在线时间210 小时 UID
主题帖子人气
你是W多少开头的?我58
我是46开头
注册时间 最后登录
在线时间756 小时 UID
主题帖子人气
注册时间 最后登录
在线时间398 小时 UID
主题帖子人气
44,这个有什么含义
注册时间 最后登录
在线时间829 小时 UID
主题帖子人气
注册时间 最后登录
在线时间1426 小时 UID
主题帖子人气
注册时间 最后登录
在线时间1019 小时 UID
主题帖子人气
注册时间 最后登录
在线时间86 小时 UID
主题帖子人气
W49,付款完了变成未付款了
威锋旗下产品
Hi~我是威威!
沪公网安备 29号 | 沪ICP备号-1
新三板上市公司威锋科技(836555)
增值电信业务经营许可证:
Powered by Discuz!内蒙古供销合作社联合社副主任张鳞龙被立案侦查
  怎么提高建行转账到网易宝的限额_全国统一客服热线:(010一5621一4545)24小时人工客服热线:(010一5621一4545)( 业务办理 退款、提现、提现不到账、转账不到账、退款不到账、查询、充值、充值话费不到账、资金解冻、提高限额等第三方服务)全天24小时服务.电话
{desCrIpTion}
  10月28日晚上10点,台州市海上搜救中心接浙江省海上搜救中心报,希腊籍油轮“南极光”与渔船“浙岭渔91002”在台州外海发生碰撞,“浙岭渔91002”船上6人全部落水,下落不明。
  接报后,台州市海上搜救中心立即启动应急预案,组织协调力量全力搜救,并要求“南极光”驻守现场参与搜救。同时,发布航行警告要求过往船舶协助搜救。
  他们还通报玉环、温岭市政府,组织其他相关力量参与搜寻。
  截至发稿时,“东海救111”以及东海舰队一军舰,“浙玉渔运10658”、“浙岭渔运31092”、“浙象渔运31001”等已赶往事故现场,“浙岭渔91046”、“浙岭渔运23505”、“浙岭渔运23853”、“浙岭渔运91099”等船舶在现场搜救。
  受新一轮寒潮南下影响,台州沿海风力达9级大风,阵风10级,给海上搜救工作带来了一定的难度。目前,海上搜救工作正在紧张进行当中。
  通讯员 陈方达 吴樟强 本报记者 陈栋
  10月28日晚上10点,台州市海上搜救中心接浙江省海上搜救中心报,希腊籍油轮“南极光”与渔船“浙岭渔91002”在台州外海发生碰撞,“浙岭渔91002”船上6人全部落水,下落不明。
  接报后,台州市海上搜救中心立即启动应急预案,组织协调力量全力搜救,并要求“南极光”驻守现场参与搜救。同时,发布航行警告要求过往船舶协助搜救。
  他们还通报玉环、温岭市政府,组织其他相关力量参与搜寻。
  截至发稿时,“东海救111”以及东海舰队一军舰,“浙玉渔运10658”、“浙岭渔运31092”、“浙象渔运31001”等已赶往事故现场,“浙岭渔91046”、“浙岭渔运23505”、“浙岭渔运23853”、“浙岭渔运91099”等船舶在现场搜救。
  受新一轮寒潮南下影响,台州沿海风力达9级大风,阵风10级,给海上搜救工作带来了一定的难度。目前,海上搜救工作正在紧张进行当中。
  通讯员 陈方达 吴樟强 本报记者 陈栋
:阴寒雾气:
:sharpdress:
:春晚细雨:
:九峰一园之中:
:一份银子:
:现在用起来:
:长吸了一口气:
:最最无法忘记:
:你虽然必然还是要杀了他:
:对方丝毫不答:
:但手一往回撤:
:愣愣地看着跳动:
百度新闻源&& 10:12:01
    编辑:接单
[] [] [] []
[] [] [] [][] []
网站:(022) 转 9008 
电台办公室: 
电台总编室:
本网站由天津人民广播电台版权所有,技术支持
Copyright 2003 - 2011All Rights Reserved秋高气爽,天气转凉,正是学习工作做的好时候。(~ ̄▽ ̄)~~(~ ̄▽ ̄)~
我是个phper最近在写微信支付(APP支付),微信给的官方文档并不是很详细也没有dome之类的代码啥的(对于新手来说比较麻烦),本人是新手以前也没写过支付,踩了好多坑,所以想写篇文章给没写过支付的新手几个建议。
这首先呢你得注册个以及的账号吧,注册完成后呢你会收到一封微信里邮件里面有你的商户号等信息,注册这俩账号完你会拥有商户号,appid,appkey等需要的东西。
准备完成后我们来看一下支付的大体流程
商户APP应用与微信支付主要的交互说明:
用户在商户APP应用(移动端)中选择商品提交订单,支付方式选择微信支付。
商户APP应用(后台)收到用户支付订单,调用微信支付中的。
商户APP应用(后台)统一下单接口调用成功后,返回的数据中有我们需要的prepay_id,按照重新生成一个签名,然后把这个重新生成的签名及app需要的数据返回给商户APP应用(移动端)。
商户APP应用(移动端)收到商户APP应用(后台)的数据调起微信支付,用户进行支付
商户APP应用(后台)的回调接口会收到微信发来的
商户APP应用(后台)查询
附:1,4是移动端所要做的事情,2,3,5是我们PHP服务端后台要做的6也是,但我没做,这个根据情况而定如果需要的话就做。
步骤1由移动端完成 步骤2. :
先要做的是流程中的第二步,调用同一下单接口。官方文档里说了请求的地址与参数,其中有一些是必填参数,有
应用ID 固定值,你申请账号时就给你了
商户号 固定值,你申请账号时就给你了
随机字符串
这个是自己写的要求不能长于32位,参见官方给的[标准][8]
我们把这个签名叫做第一次签名,注意这个是个坑,得自己写了,官方只给了如何写的[标准][9]没有代码,这个就比较蛋疼了。好多人掉进这个坑里,写的签名函数不对,老是出错。但不用担心我在文章的最后会贴出代码里面有签名函数直接调用就可以了。(注意看我写的函数使用规则)
商品描述交易字段格式根据不同的应用场景按照以下格式:APP——需传入应用市场上的APP名字-实际商品名称,天天爱消除-游戏充值。
out_trade_no
商户订单号
我们自己定义的订单号,32个字符内、可包含字母。
这个就是你要支付的钱数了,由前端返回。注意一下这里的货币单位是分!
spbill_create_ip
这个用户的IP地址,写个取IP地址的函数一调用就行
notify_url
这又是一个坑,好多人不理解是干嘛的,这是接收微信支付异步通知回调地址用的,通知url必须为直接可访问的url,不能携带参数! 也可以这样理解,这个是给微信支付的接口,微信来调用的接口,微信调这接口干嘛用呢?就是告诉你用户付款成功啦或者用户付款失败了,然后你就可以在这个接口里通过微信给你返回的信息来做逻辑处理了。
trade_type
写 “APP” 因为咱写的是APP支付嘛,所以就填APP。
好了就是这些必选参数了,剩下就可以自己选择是否要用的参数了根据自己情况而定。参数选完了就要发送参数了呗,如何发呢?我们来调用wechatAppPay类中的unifiedOrder()函数。啊哈啥!!!!!!??????(⊙o⊙)?(⊙o⊙)?(⊙o⊙)?(⊙o⊙)?(⊙o⊙)?wechatAppPay类???unifiedOrder()函数???对就这这俩东西,不要惊讶,不要着急看最后有代码,有这个类,有代码的O(∩_∩)O哈哈~,你只需在你的项目中加载这个类就可以调用这个方法了!不要崇拜我( ╯▽╰)(因为这个类不是我写的我也忘了从哪找的了,我从百度搜的然后整理的做了些改动╮(╯▽╰)╭
-_-|||-_-|||-_-!好吧好吧好吧没做改动,只是加了点注释而已,感谢写这个类的大神谢谢O(∩_∩)O谢谢O(∩_∩)O谢谢)好了抽完疯了,开是干正事!
我们先来new下wechatAppPay类
= 'wx0';//应用ID 字符串
= '';//商户号 字符串
$notify_url
= '/xxxx.php/xxxx/xxxx';//接收微信支付异步通知回调地址 字符串
= '';//这个是在商户中心设置的那个值用来生成签名时保证安全的 字符串
$this-&wechatAppPay = new wechatAppPay($wxappid, $mch_id, $notify_url, $wxkey);
调用wechatAppPay类中的unifiedOrder()函数。unifiedOrder()需要的参数是个数组我们定义为$params
= array();
$params['body']
= 'APP-在线支付';
//必填项 商品描述
$params['out_trade_no']
time()."$member";
//必填项 自定义的订单号
$params['total_fee']
= ($money*100);
//必填项 订单金额 单位为分所以要*100
$params['trade_type']
//必填项 交易类型固定写
$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),其他都不重要了步骤2完毕
步骤3 把数据返回给商户APP应用(移动端)
现在我们要把调用统一下单接口返回的数据$resutl里的几个值返回给移动端那几个值呢?这几个:
应用ID 这个是固定的 可以自己写也可以从$resutl里拿 可以让移动端写死 就不用每次返回了
商户号 这个也是固定的 可以自己写也可以从$resutl里拿 可以让移动端写死 就不用每次返回了
预支付交易会话ID 这个很重要必须返回给移动端 是必须从$resutl里拿的
扩展字段 可以自己写也可以从$resutl里拿 暂填写固定值"Sign=WXPay" 可以让移动端写死 就不用每次返回了
随机字符串
这个可以自己写也可以从$resutl里拿
时间戳 自己生成 标准北京时间,时区为东八区注意:部分系统取到的值为毫秒级,需要转换成秒(10位数字),这里有个坑,ISO端接收的时候好像得强行转化一下,因为返回的是字符串不是数字,还有什么几位的数字之类的,我也不太懂,反正就是写的时候提醒下iOS工程师就行。安卓不清楚。
签名 又来一个坑,我们把这个签名叫做二次签名,但是这个签名不是从$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 回调接口
还记得步骤2中我们设置的$notify_url吗,对现在就要对这个微信返回到这个接口的数据进行一系列的逻辑处理了官方是这样写的:
支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答。
对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。 (通知频率为15/15/30/180/00/,单位:秒)
注意:同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。
推荐的做法是,当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。
特别提醒:商户系统对于支付结果通知的内容一定要做签名验证,防止数据泄漏导致出现“假通知”,造成资金损失。
首先来接收数据
$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);//生成验签签名
好了现在假设你的验签已经通过了接下里就是你自己的逻辑处理了
///////////////////////////////////////////////////////
商户APP应用(后台)处理逻辑代码
//////////////////////////////////////////////////////
自己的逻辑处理已经处理完之后,还得告诉微信一下,别再一直发结果通用通知啦,我已经收到通知并处理完啦!
$this-&wechatAppPay-&replyNotify();//商户处理后同步返回给微信参数
步骤5结束步骤6根据自己情况而定
至此微信支付处理完成~(≧▽≦)/~啦啦啦~(≧▽≦)/~啦啦啦~(≧▽≦)/~啦啦啦~(≧▽≦)/~啦啦啦
写的有不对的方还请大家多多指导指教!!!给我留言!!b( ̄▽ ̄)db( ̄▽ ̄)db( ̄▽ ̄)d
还有感谢在我写微信支付地时候 那些被我问烦了的大神们! !谢谢啦~(≧▽≦)/~啦啦啦~(≧▽≦)/~啦啦啦~(≧▽≦)/~啦啦啦O(∩_∩)O哈哈~O(∩_∩)O哈哈~O(∩_∩)O哈哈~&( ̄︶ ̄)&&( ̄︶ ̄)&&( ̄︶ ̄)&
wechatAppPay类
class wechatAppPay
//接口API URL前缀
const API_URL_PREFIX = 'https://api.mch.';
//下单地址URL
const UNIFIEDORDER_URL = "/pay/unifiedorder";
//查询订单URL
const ORDERQUERY_URL = "/pay/orderquery";
//关闭订单URL
const CLOSEORDER_URL = "/pay/closeorder";
//公众账号ID
private $mch_
//随机字符串
private $nonce_
//商品描述
//商户订单号
private $out_trade_
//支付总金额
private $total_
private $spbill_create_
//支付结果回调通知地址
private $notify_
//交易类型
private $trade_
//支付密钥
//证书路径
private $SSLCERT_PATH;
private $SSLKEY_PATH;
//所有参数
private $params = array();
public function __construct($wxappid, $mch_id, $notify_url, $key)
$this-&appid = $
$this-&mch_id = $mch_
$this-&notify_url = $notify_
$this-&key = $
* 下单方法
$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-&
$this-&params['mch_id'] = $this-&mch_
$this-&params['nonce_str'] = $this-&nonce_
$this-&params['body'] = $this-&
$this-&params['out_trade_no'] = $this-&out_trade_
$this-&params['total_fee'] = $this-&total_
$this-&params['spbill_create_ip'] = $this-&spbill_create_
$this-&params['notify_url'] = $this-&notify_
$this-&params['trade_type'] = $this-&trade_
//获取签名数据
$this-&sign = $this-&MakeSign( $this-&params );
$this-&params['sign'] = $this-&
$xml = $this-&data_to_xml($this-&params);
$response = $this-&postXmlCurl($xml, self::API_URL_PREFIX.self::UNIFIEDORDER_URL);
if( !$response ){
$result = $this-&xml_to_data( $response );
if( !empty($result['result_code']) && !empty($result['err_code']) ){
$result['err_msg'] = $this-&error_code( $result['err_code'] );
* 查询订单信息
* @param $out_trade_no
* @return array
public function orderQuery( $out_trade_no ){
$this-&params['appid'] = $this-&
$this-&params['mch_id'] = $this-&mch_
$this-&params['nonce_str'] = $this-&genRandomString();
$this-&params['out_trade_no'] = $out_trade_
//获取签名数据
$this-&sign = $this-&MakeSign( $this-&params );
$this-&params['sign'] = $this-&
$xml = $this-&data_to_xml($this-&params);
$response = $this-&postXmlCurl($xml, self::API_URL_PREFIX.self::ORDERQUERY_URL);
if( !$response ){
$result = $this-&xml_to_data( $response );
if( !empty($result['result_code']) && !empty($result['err_code']) ){
$result['err_msg'] = $this-&error_code( $result['err_code'] );
* 关闭订单
* @param $out_trade_no
* @return array
public function closeOrder( $out_trade_no ){
$this-&params['appid'] = $this-&
$this-&params['mch_id'] = $this-&mch_
$this-&params['nonce_str'] = $this-&genRandomString();
$this-&params['out_trade_no'] = $out_trade_
//获取签名数据
$this-&sign = $this-&MakeSign( $this-&params );
$this-&params['sign'] = $this-&
$xml = $this-&data_to_xml($this-&params);
$response = $this-&postXmlCurl($xml, self::API_URL_PREFIX.self::CLOSEORDER_URL);
if( !$response ){
$result = $this-&xml_to_data( $response );
* 获取支付结果通知数据
* return array
public function getNotifyData(){
//获取通知的数据
$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
$data = array();
if( empty($xml) ){
$data = $this-&xml_to_data( $xml );
if( !empty($data['return_code']) ){
if( $data['return_code'] == 'FAIL' ){
* 接收通知成功后应答输出XML数据
* @param string $xml
public function replyNotify(){
$data['return_code'] = 'SUCCESS';
$data['return_msg'] = 'OK';
$xml = $this-&data_to_xml( $data );
* 生成APP端支付参数
public function getAppPayParams( $prepayid ){
$data['appid'] = $this-&
$data['partnerid'] = $this-&mch_
$data['prepayid'] = $
$data['package'] = 'Sign=WXPay';
$data['noncestr'] = $this-&genRandomString();
$data['timestamp'] = time();
$data['sign'] = $this-&MakeSign( $data );
* 生成签名
@return 签名
public function MakeSign( $params ){
//签名步骤一:按字典序排序数组参数
ksort($params);
$string = $this-&ToUrlParams($params);
//签名步骤二:在string后加入KEY
$string = $string . "&key=".$this-&
//签名步骤三:MD5加密
$string = md5($string);
//签名步骤四:所有字符转为大写
$result = strtoupper($string);
* 将参数拼接为url: key=value&key=value
public function ToUrlParams( $params ){
$string = '';
if( !empty($params) ){
$array = array();
foreach( $params as $key =& $value ){
$array[] = $key.'='.$
$string = implode("&",$array);
* 输出xml字符
返回组装的xml
public function data_to_xml( $params ){
if(!is_array($params)|| count($params) &= 0)
$xml = "&xml&";
foreach ($params as $key=&$val)
if (is_numeric($val)){
$xml.="&".$key."&".$val."&/".$key."&";
$xml.="&".$key."&&![CDATA[".$val."]]&&/".$key."&";
$xml.="&/xml&";
* 将xml转为array
* @param string $xml
* return array
public function xml_to_data($xml){
if(!$xml){
//将XML转为array
//禁止引用外部xml实体
libxml_disable_entity_loader(true);
$data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
* 获取毫秒级别的时间戳
private static function getMillisecond(){
//获取毫秒的时间戳
$time = explode ( " ", microtime () );
$time = $time[1] . ($time[0] * 1000);
$time2 = explode( ".", $time );
$time = $time2[0];
* 产生一个指定长度的随机字符串,并返回给用户
* @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", "R",
"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 & $ $i++) {
$output .= $chars[mt_rand(0, $charsLen)];
* 以post方式提交xml到对应的接口url
* @param string $xml
需要post的xml数据
* @param string $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_HEADER, FALSE);
//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 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);
$error = curl_errno($ch);
curl_close($ch);
* 错误代码
服务器输出的错误代码
* return string
public function error_code( $code ){
$errList = array(
'商户未开通此接口权限',
'NOTENOUGH'
'用户帐号余额不足',
'ORDERNOTEXIST'
'订单号不存在',
'ORDERPAID'
'商户订单已支付,无需重复操作',
'ORDERCLOSED'
'当前订单已关闭,无法支付',
'SYSTEMERROR'
'系统错误!系统超时',
'APPID_NOT_EXIST'
'参数中缺少APPID',
'MCHID_NOT_EXIST'
'参数中缺少MCHID',
'APPID_MCHID_NOT_MATCH' =&
'appid和mch_id不匹配',
'LACK_PARAMS'
'缺少必要的请求参数',
'OUT_TRADE_NO_USED'
'同一笔交易不能多次提交',
'SIGNERROR'
'参数签名结果不正确',
'XML_FORMAT_ERROR'
'XML格式错误',
'REQUIRE_POST_METHOD'
'未使用post传递参数 ',
'POST_DATA_EMPTY'
'post数据不能为空',
'NOT_UTF8'
'未使用指定编码格式',
if( array_key_exists( $code , $errList ) ){
return $errList[$code];
你可能感兴趣的文章
10 收藏,1.4k
8 收藏,581
本文采用 ,分享、演绎需署名且使用相同方式共享,不能用于商业目的。
本文隶属于专栏
随性而定,随遇而安
分享到微博?
技术专栏,帮你记录编程中的点滴,提升你对技术的理解收藏感兴趣的文章,丰富自己的知识库
明天提醒我
我要该,理由是:
扫扫下载 App
SegmentFault
一起探索更多未知

我要回帖

更多关于 支付宝付款是什么意思 的文章

 

随机推荐