微信支付调用统一下单 重复订单号申请id ,,应该是报微信 商户订单号重复复,但是每次都能通过

php微信支付接口开发程序(流程已通)-Php常用代码-Php教程-壹聚教程网php微信支付接口开发程序(流程已通)微信支付接口现在也慢慢的像支付宝一个可以利用api接口来实现第三方网站或应用进行支付了,下文整理了一个php微信支付接口开发程序并且己测试,有兴趣的朋友可进入参考。
必要条件:
appid //公众号后台开发者中心获得(和邮件内的一样)&& mchid//邮件内获得& key//商户后台自己设置& apecret //公众号开发者中心获得
两个证书文件,邮件内获得 apiclient_cert.pem&& apiclient_key.pem
注意事项:
公众号后台微信支付-》开发配置-》新增测试目录和测试个人微信号。
开发者中心-》网页授权获取用户基本信息-》修改成你的测试域名。否则会出现redirect_uri 参数错误
&&&&&&&&&&后续待完善&&&&&&-
微信支付就绪页面后台自行了三次操作:
1.获取openid
//使用jsapi接口
&& $jsApi = new JsApi_pub();
&&& //=========步骤1:网页授权获取用户openid============
&&& //通过code获得openid
&&& if (!isset($_GET['code']))
&&&&&&& //触发微信返回code码
&&&&&&& $url = $jsApi-&createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);
&&&&&&& //echo $
&&&&&&& Header(&Location: $url&);
&&&&&&& //获取code码,以获取openid
&&&&&&& $code = $_GET['code'];
&&&&&&& $jsApi-&setCode($code);
&&&&&&& $openid = $jsApi-&getOpenid();
刚开始的时候第一步也遇到问题,没饭获得openid这个和部分服务器有关,demo内用的是curl获取的方式。奇怪我的服务器curl一直无法获取到。后来改成file_get_contents可以正常获取了。可这并不是解决之道。因为后面还需要用到更多的curl操作。看到开发文档里面有一个地方写证书操作需要libcurl 7.20.1以上版本,然后我就一直在整服务器想把linux的版本提高。最后面我是换到了另外一台windows服务器就好了。先暂时这样吧,下次需要用的时候再调试。
第二步:获取与支付订单号id
$unifiedOrder = new UnifiedOrder_pub();
&&& //var_dump($unifiedOrder);
&&& //设置统一支付接口参数
&&& //设置必填参数
&&& //appid已填,商户无需重复填写
&&& //mch_id已填,商户无需重复填写
&&& //noncestr已填,商户无需重复填写
&&& //spbill_create_ip已填,商户无需重复填写
&&& //sign已填,商户无需重复填写
&&& $unifiedOrder-&setParameter(&openid&,&$openid&);//商品描述
&&& $unifiedOrder-&setParameter(&body&,&贡献一分钱&);//商品描述
&&& //自定义订单号,此处仅作举例
&&& $timeStamp = time();
&&& $out_trade_no = WxPayConf_pub::APPID.&$timeStamp&;
&&& $unifiedOrder-&setParameter(&out_trade_no&,&$out_trade_no&);//商户订单号
&&& $unifiedOrder-&setParameter(&total_fee&,&1&);//总金额
&&& $unifiedOrder-&setParameter(&notify_url&,WxPayConf_pub::NOTIFY_URL);//通知地址
&&& $unifiedOrder-&setParameter(&trade_type&,&JSAPI&);//交易类型
&&& //非必填参数,商户可根据实际情况选填
&&& //$unifiedOrder-&setParameter(&sub_mch_id&,&XXXX&);//子商户号&
&&& //$unifiedOrder-&setParameter(&device_info&,&XXXX&);//设备号
&&& //$unifiedOrder-&setParameter(&attach&,&XXXX&);//附加数据
&&& //$unifiedOrder-&setParameter(&time_start&,&XXXX&);//交易起始时间
&&& //$unifiedOrder-&setParameter(&time_expire&,&XXXX&);//交易结束时间
&&& //$unifiedOrder-&setParameter(&goods_tag&,&XXXX&);//商品标记
&&& //$unifiedOrder-&setParameter(&openid&,&XXXX&);//用户标识
&&& //$unifiedOrder-&setParameter(&product_id&,&XXXX&);//商品ID
&&& $prepay_id = $unifiedOrder-&getPrepayId();
&&& //echo 'prepay_id:';
&&& var_dump($prepay_id);
这一步也遇到非常多的问题。
首先微信支付测试比较困难,只有在微信内才可以测试。我就用手机刷来刷去。其次使用var_dump调试也不好使额。打印一些 xml格式的文件只显示字符长度,不显示内容。于是用log的形式写在服务器上调试,log代码:
// 打印log
&&& function& log_d($word)
&&&&&&& $log_name=&./logd.log&;//log文件路径
&&&&&&& $fp = ($log_name,&a&);
&&&&&&& flock($fp, LOCK_EX) ;
&&&&&&& fwrite($fp,&执行日期:&.strftime(&%Y-%m-%d-%H:%M:%S&,time()).&n&.$word.&nn&);
&&&&&&& flock($fp, LOCK_UN);
&&&&&&& fclose($fp);
在demo里面的 WxPayPubHelper.php 里面 用 $this-&log_d(xxx);调用。
刚开始的时候由于给我的mchid和 appid不匹配一直报错。。是他们给错我账号了。刚开始我也不懂乱试。这一步的调试在 getPrepayId()内 var_dump($this-&result); 就能看到错误代码。
第三步:生成支付前端 js代码就绪到网页上:
$jsApi-&setPrepayId($prepay_id);
&&& $jsApiParameters = $jsApi-&getParameters();
&&&&&&&-点击前往支付&&&&&&&&-
这部分又遇到了问题:
android返回&System:Access_denied&,ios返回&access_control:not_allowed&
搜了很多百度。其实早就看到了这个东西一直没注意!
发起授权请求的页面必须是在授权目录下的页面,而不能是存在与子目录中。否则会返回错误
支付文件我放在了/域名/pay/demo/
刚开始的时候我一直是到/域名/pay/结尾以为就可以了。支持子目录,结果是不行的!。
&&&&&&&&&最后看下图&&&&&
&&&&&&流程中的xmljs&&&&&&&
待提交生成与支付订单id:
& &openid&&![CDATA[ou9dHt0L8qFLI1foP-kj5x1mDWsM]]&&/openid&
& &body&&![CDATA[贡献一下]]&&/body&
& &out_trade_no&&![CDATA[wx79]]&&/out_trade_no&
& &total_fee&1&/total_fee&
& &notify_url&&![CDATA[http://shanmao.me/wxpay/notify_url.php]]&&/notify_url&
& &trade_type&&![CDATA[JSAPI]]&&/trade_type&
& &appid&&![CDATA[wx8888]]&&/appid&
& &mch_id&&/mch_id&
& &spbill_create_ip&&![CDATA[61.50.221.43]]&&/spbill_create_ip&
& &nonce_str&&![CDATA[60uf9sh6nmppr9azveb2bn7arhy79izk]]&&/nonce_str&
& &sign&&![CDATA[2D8ABBA23D0F]]&&/sign&
提交后返回正确,其中包含了perpay_id:
& &return_code&&![CDATA[SUCCESS]]&&/return_code&&
& &return_msg&&![CDATA[OK]]&&/return_msg&&
& &appid&&![CDATA[wx8888]]&&/appid&&
& &mch_id&&![CDATA[]]&&/mch_id&&
& &nonce_str&&![CDATA[Be8YX7gjCdtCT7cr]]&&/nonce_str&&
& &sign&&![CDATA[885B6D8EF753A00C8EEDB]]&&/sign&&
& &result_code&&![CDATA[SUCCESS]]&&/result_code&&
& &prepay_id&&![CDATA[wx]]&&/prepay_id&&
& &trade_type&&![CDATA[JSAPI]]&&/trade_type&
生成支付用的js :
&&& &appId&: &wx8888&,
&&& &timeStamp&: &&,
&&& &nonceStr&: &gbwr71b5no6q6ne18c8up1u7l7he2y75&,
&&& &package&: &prepay_id=wx&,
&&& &signType&: &MD5&,
&&& &paySign&: &9CF851EBF6C7D&
支付成功后返回的通知xml:
&xml&&appid&&![CDATA[wx]]&&/appid&
&bank_type&&![CDATA[CCB_DEBIT]]&&/bank_type&
&fee_type&&![CDATA[CNY]]&&/fee_type&
&is_subscribe&&![CDATA[Y]]&&/is_subscribe&
&mch_id&&![CDATA[1011111]]&&/mch_id&
&nonce_str&&![CDATA[38gt0ffgsvfsdfsdfbt1981duv63p7]]&&/nonce_str&
&openid&&![CDATA[o4p3SjfdsfdsfdsdCE5Y2XHw4]]&&/openid&
&out_trade_no&&![CDATA[wx4b56d1fsdfdsf]]&&/out_trade_no&
&result_code&&![CDATA[SUCCESS]]&&/result_code&
&return_code&&![CDATA[SUCCESS]]&&/return_code&
&sign&&![CDATA[356EfsdfdsfsdsfE69509EDA344]]&&/sign&
&sub_mch_id&&![CDATA[]]&&/sub_mch_id&
&time_end&&![CDATA[22]]&&/time_end&
&total_fee&1&/total_fee&
&trade_type&&![CDATA[JSAPI]]&&/trade_type&
&transaction_id&&![CDATA[fsdfsd4]]&&/transaction_id&
这其中的数据我随意了的,大家就参考下格式吧。注意大小写敏感。
上一页: &&&&&下一页:相关内容微信支付现金红包接口正式开放,只需开通微信支付,即可接入现金红包。通过现金红包接口,公众号开发者可以策划相关运营活动,向用户发放微信支付现金红包,更好的达到品牌推广及回馈用户的效果。具体能力如下:
1、商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种各样丰富的活动场景
2、领取到红包后,用户的资金直接进入微信零钱,避免繁复的领奖流程,带给用户微信支付原生的流畅体验
微信红包发送规则
1.&发送频率规则
 ◆ 每分钟发送红包数量不得超过1800个;
 ◆ 北京时间0:00-8:00不触发红包赠送;(如果以上规则不满足您的需求,请发邮件至获取升级指引)
2.&红包规则
 ◆ 单个红包金额介于[1.00元,200.00元]之间;
 ◆ 同一个红包只能发送给一个用户;(如果以上规则不满足您的需求,请发邮件至获取升级指引)
商户侧调用红包接口流程
1.&登录微信支付商户平台下载证书以及充值
在调用接口前,请商户使用微信支付商户号登录微信支付商户平台完成下述工作:
微信支付商户平台地址为pay.。微信支付商户号会在商户申请微信支付成功后,通过开户邮件发送给您。请不要使用微信公众平台账号或者appid登录。如果您登录时遇到问题,请联系微信支付小助手
 ◆ 下载证书
商户调用微信红包接口时,服务器会进行证书验证,请在商户平台下载证书
 ◆ 充值
 发放现金红包将扣除商户的可用余额,请注意,可用余额并不是微信支付交易额,需要预先充值,确保可用余额充足。查看可用余额、充值、提现请登录微信支付商户平台,进入&资金管理&菜单,进行操作
2.&微信红包接口调用流程
 ◆ 后台API调用:待进入联调过程时与开发进行详细沟通;
 ◆ 告知服务器:告知服务器接收微信红包的用户openID,告知服务器该用户获得的金额;
 ◆ 从商务号扣款:服务器获取信息后从对应的商务号扣取对应的金额;
 ◆ 调用失败:因不符合发送规则,商务号余额不足等原因造成调用失败,反馈至调用方;
 ◆ 发送成功:以微信红包公众账号发送对应红包至对应用户;
用户交互流程
调用现金红包接口,发放成功后,用户领取红包流程如下:
步骤(一):收到领取红包消息,步骤(二):点击领取消息,拆红包
接口详细说明
1.红包发放说明
用于企业向微信用户个人发现金红包
目前支持向指定微信用户的openid发放指定金额红包。(获取openid参见微信公众平台开发者文档:&)
接口参数与用户领用实际效果对应关系如下:
如需操作请登录
2.接口调用请求说明
https://api.mch./mmpaymkttransfers/sendredpack
是否需要证书
是(证书及使用说明详见)
3.请求参数
随机字符串
5K8264ILTKCH16CQ2502SI8ZNMTM67VS
String(32)
随机字符串,不长于32位
C380BEC2BFD727A4BF3AD6
String(32)
商户订单号
mch_billno
String(28)
商户订单号(每个订单号必须唯一)
组成:&mch_id+yyyymmdd+10位一天内不能重复的数字。
接口根据商户订单号支持重入,&如出现超时可再调用。
String(32)
微信支付分配的商户号
sub_mch_id
String(32)
微信支付分配的子商户号,受理模式下必填
公众账号appid
String(32)
提供方名称
String(32)
提供方名称
String(32)
红包发送者名称
用户openid
oxTWIuGaIt6gTKsQRLau2M0yL16E
String(32)
接受收红包的用户
用户在wxappid下的openid
total_amount
付款金额,单位分
最小红包金额
最小红包金额,单位分
最大红包金额
最大红包金额,单位分
(&最小金额等于最大金额:&min_value=max_value&=total_amount)
红包发放总人数
红包发放总人数
total_num=1
红包祝福语
感谢您参加猜灯谜活动,祝您元宵节快乐!
String(128)
红包祝福语
192.168.0.1
String(15)
调用接口的机器Ip地址
猜灯谜抢红包活动
String(32)
猜越多得越多,快来抢!
String(256)
商户logo的url
logo_imgurl
/mch/img/ico-logo.png
String(128)
商户logo的url
share_content
快来参加猜灯谜活动
String(256)
String(128)
分享的图片
share_imgurl
/mch/img/ico-logo.png
String(128)
分享的图片url
数据示例:
&&&&&&&&&&&&&sign&&/sign&
&&&&&&&&&&&&&mch_billno&&/mch_billno&
&&&&&&&&&&&&&mch_id&&/mch_id&
&&&&&&&&&&&&&wxappid&&/wxappid&
&&&&&&&&&&&&&nick_name&&/nick_name&
&&&&&&&&&&&&&send_name&&/send_name&
&&&&&&&&&&&&&re_openid&&/re_openid&
&&&&&&&&&&&&&total_amount&&/total_amount&
&&&&&&&&&&&&&min_value&&/min_value&
&&&&&&&&&&&&&max_value&&/max_value&
&&&&&&&&&&&&&total_num&&/total_num&
&&&&&&&&&&&&&wishing&&/wishing&
&&&&&&&&&&&&&client_ip&&/client_ip&
&&&&&&&&&&&&&act_name&&/act_name&
&&&&&&&&&&&&&act_id&&/act_id&
&&&&&&&&&&&&&remark&&/remark&
&&&&&&&&&&&&&logo_imgurl&&/logo_imgurl&
&&&&&&&&&&&&&share_content&&/share_content&
&&&&&&&&&&&&&share_url&&/share_url&
&&&&&&&&&&&&&share_imgurl&&/share_imgurl&
&&&&&&&&&&&&&nonce_str&&/nonce_str&
&&&&&&&&&/xml&
4.返回参数
返回状态码
return_code
String(16)
SUCCESS/FAIL
此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断
return_msg
String(128)
返回信息,如非空,为错误原因
参数格式校验错误
以下字段在return_code为SUCCESS的时候有返回
C380BEC2BFD727A4BF3AD6
String(32)
生成签名方式详见
result_code
String(16)
SUCCESS/FAIL
SYSTEMERROR
String(32)
错误码信息
错误代码描述
err_code_des
String(128)
结果信息描述
以下字段在return_code&和result_code都为SUCCESS的时候有返回
商户订单号
mch_billno
String(28)
商户订单号(每个订单号必须唯一)
组成:&mch_id+yyyymmdd+10位一天内不能重复的数字
String(32)
微信支付分配的商户号
公众账号appid
String(32)
用户openid
oxTWIuGaIt6gTKsQRLau2M0yL16E
String(32)
接受收红包的用户
用户在wxappid下的openid
total_amount
付款金额,单位分
发放成功时间
成功示例:
&return_code&&![CDATA[SUCCESS]]&&/return_code&
&return_msg&&![CDATA[发放成功.]]&&/return_msg&
&result_code&&![CDATA[SUCCESS]]&&/result_code&
&err_code&&![CDATA[0]]&&/err_code&
&err_code_des&&![CDATA[发放成功.]]&&/err_code_des&
&mch_billno&&![CDATA[6545]]&&/mch_billno&
&mch_id&&/mch_id&
&wxappid&&![CDATA[wx6fa7e3bab7e15415]]&&/wxappid&
&re_openid&&![CDATA[onqOjjmM1tad-3ROpncN-yUfa6uI]]&&/re_openid&
&total_amount&1&/total_amount&
失败示例:
&&&&&&&&&&&&&&&&&&return_code&&![CDATA[FAIL]]&&/return_code&
&return_msg&&![CDATA[系统繁忙,请稍后再试.]]&&/return_msg&
&result_code&&![CDATA[FAIL]]&&/result_code&
&err_code&&![CDATA[]]&&/err_code&
&err_code_des&&![CDATA[系统繁忙,请稍后再试.]]&&/err_code_des&
&mch_billno&&![CDATA[6542]]&&/mch_billno&
&mch_id&&/mch_id&
&wxappid&&![CDATA[wx6fa7e3bab7e15415]]&&/wxappid&
&re_openid&&![CDATA[onqOjjmM1tad-3ROpncN-yUfa6uI]]&&/re_openid&
&total_amount&1&/total_amount&
请联系微信支付开通api权限
PARAM_ERROR
请查看err_code_des,修改设置错误的参数
OPENID_ERROR
Openid错误
根据用户在商家公众账号上的openid,获取用户在红包公众账号上的openid&错误。请核对商户自身公众号appid和用户在此公众号下的openid。
商户账号余额不足,请登录微信支付商户平台充值
SYSTEMERROR
系统繁忙,请再试。
可用同一商户单号再次调用,只会发放一个红包。
TIME&_LIMITED
企业红包的发送时间受限
请北京时间0:00-8:00时间之外触发红包赠送
SECOND_OVER_LIMITED
企业红包的按分钟发放受限
每分钟发送红包数量不得超过1800个;(可联系微信支付调高额度)
MONEY_LIMIT
红包金额发放限制
每个红包金额必须大于1元,小于200元(可联系微信支付调高额度至4999元)
源代码及演示demo
关注方倍工作室微信公众账号(账号:pondbaystudio)
阅读(...) 评论()对不起,博客出现了未知的错误!Google提供的广告本人小菜鸟一只,为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,服务器)等一系列的知识,小菜鸟创建了一个群。希望光临本博客的人可以进来交流。寻求共同发展。搭建平台。本人博客也有许多的技术文档,希望可以为你提供一些帮助。QQ群:&& &&&&&&&&&&&&&& QQ:
需要申请相应的帐号
后台设置支付目录
js_api_call.php
&* JS_API支付demo
&* ====================================================
&* 在微信浏览器里面打开H5网页中执行JS调起支付。接口输入输出数据格式为JSON。
&* 成功调起支付需要三个步骤:
&* 步骤1:网页授权获取用户openid
&* 步骤2:使用统一支付接口,获取prepay_id
&* 步骤3:使用jsapi调起支付
&& &include_once(&WxPayPubHelper/WxPayPubHelper.php&);
&& &//使用jsapi接口
&& &$jsApi = new JsApi_pub();
&& &//=========步骤1:网页授权获取用户openid============
&& &//通过code获得openid
&& &if (!isset($_GET['code']))
&& &&& &//触发微信返回code码
&& &&& &$url = $jsApi-&createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);
&& &&& &Header(&Location: $url&);
&& &&& &//获取code码,以获取openid
&& &&&& $code = $_GET['code'];
&& &&& &$jsApi-&setCode($code);
&& &&& &$openid = $jsApi-&getOpenId();
&& &// $openid = 'oywLxshg8ZwoEURBA9seM-Ahdp-s';
&& &//=========步骤2:使用统一支付接口,获取prepay_id============
&& &//使用统一支付接口
&& &$unifiedOrder = new UnifiedOrder_pub();
&& &//设置统一支付接口参数
&& &//设置必填参数
&& &//appid已填,商户无需重复填写
&& &//mch_id已填,商户无需重复填写
&& &//noncestr已填,商户无需重复填写
&& &//spbill_create_ip已填,商户无需重复填写
&& &//sign已填,商户无需重复填写
&& &$unifiedOrder-&setParameter(&openid&,&$openid&);//商品描述
&& &$unifiedOrder-&setParameter(&body&,&贡献一分钱&);//商品描述
&& &//自定义订单号,此处仅作举例
&& &$timeStamp = time();
&& &$out_trade_no = WxPayConf_pub::APPID.&$timeStamp&;
&& &$unifiedOrder-&setParameter(&out_trade_no&,&$out_trade_no&);//商户订单号
&& &$unifiedOrder-&setParameter(&total_fee&,&1&);//总金额
&& &$unifiedOrder-&setParameter(&notify_url&,WxPayConf_pub::NOTIFY_URL);//通知地址
&& &$unifiedOrder-&setParameter(&trade_type&,&JSAPI&);//交易类型
&& &//非必填参数,商户可根据实际情况选填
&& &//$unifiedOrder-&setParameter(&sub_mch_id&,&XXXX&);//子商户号 &
&& &//$unifiedOrder-&setParameter(&device_info&,&XXXX&);//设备号
&& &//$unifiedOrder-&setParameter(&attach&,&XXXX&);//附加数据
&& &//$unifiedOrder-&setParameter(&time_start&,&XXXX&);//交易起始时间
&& &//$unifiedOrder-&setParameter(&time_expire&,&XXXX&);//交易结束时间
&& &//$unifiedOrder-&setParameter(&goods_tag&,&XXXX&);//商品标记
&& &//$unifiedOrder-&setParameter(&openid&,&XXXX&);//用户标识
&& &//$unifiedOrder-&setParameter(&product_id&,&XXXX&);//商品ID
&& &$prepay_id = $unifiedOrder-&getPrepayId();
&& &//=========步骤3:使用jsapi调起支付============
&& &$jsApi-&setPrepayId($prepay_id);
&& &$jsApiParameters = $jsApi-&getParameters();
&& &//echo $jsApiP
&&& &meta http-equiv=&content-type& content=&text/charset=utf-8&/&
&&& &title&微信安全支付&/title&
&& &&script type=&text/javascript&&
&& &&& &//调用微信JS api 支付
&& &&& &function jsApiCall()
&& &&& &&& &WeixinJSBridge.invoke(
&& &&& &&& &&& &'getBrandWCPayRequest',
&& &&& &&& &&& &&?php echo $jsApiP ?&,
&& &&& &&& &&& &function(res){
&& &&& &&& &&& &&& &WeixinJSBridge.log(res.err_msg);
&& &&& &&& &&& &&& &//alert(res.err_code+res.err_desc+res.err_msg);
&& &&& &&& &&& &}
&& &&& &&& &);
&& &&& &function callpay()
&& &&& &&& &if (typeof WeixinJSBridge == &undefined&){
&& &&& &&& &&&& if( document.addEventListener ){
&& &&& &&& &&&&&&&& document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
&& &&& &&& &&&& }else if (document.attachEvent){
&& &&& &&& &&&&&&&& document.attachEvent('WeixinJSBridgeReady', jsApiCall);
&& &&& &&& &&&&&&&& document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
&& &&& &&& &&&& }
&& &&& &&& &}else{
&& &&& &&& &&&& jsApiCall();
&& &&& &&& &}
&& &&/script&
&& &&/br&&/br&&/br&&/br&
&& &&div align=&center&&
&& &&& &&button style=&width:210 height:30 background-color:#FE6714; border:0px #FE6714 cursor:& color:& font-size:16& type=&button& onclick=&callpay()& &贡献一下&/button&
&& &&/div&
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:174930次
积分:4119
积分:4119
排名:第3319名
原创:223篇
转载:29篇
评论:52条
(7)(1)(11)(1)(2)(1)(15)(13)(1)(12)(16)(31)(34)(14)(11)(50)(32)}

我要回帖

更多关于 asp生成不重复订单号 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信