下面的微信支付是什么意思

问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
各位神门,请教下,在京东APP里使用微信支付成功后,弹出的页面(该页面应该是微信的统一提示页面,不知我的理解是否有错)下面有一个是否关注京东公众号的选择项,想知道这个页面中的公众号appid是哪个阶段哪个接口哪个参数传给微信服务器的,不然页面中是怎么准确显示具体的公众号的,如下图,是如何实现的?
了解到了开放平台中微信支付有一个公共【】API,疑问如下图,请大虾们解答解答。。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
微信6.0的新接口:
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
没这个接口,京东是微信的亲戚,有很多特权,你懂得
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
确实是新接口,注意观察的话,在支付成功页面右下角会有一个复选框,默认选中的是关注对方的公众号。不知道为啥第一个回答居然有2个赞。(⊙﹏⊙)
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
弱弱的问句这个是APP支付端的功能?还是公众号支付功能?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
我也疑惑,这个是否关注公众号怎么配置,这个好像是腾讯返回给我们的结果啊,不知道怎么设置啊
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
请问LZ问题解决了吗?如果解决了的话求指点!
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
同问,希望了解的大神帮忙解答一下~
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
到这个地址申请:
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
这个好像是和支付的多少钱有关系,钱多了就有;钱少就没有
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
同问关于自动关注。因为我们公司的页面直接就是购买产品页面,价格是150以上的。是否客人支付成功了就自动关注了我公司的服务号呐
该答案已被忽略,原因:答非所问:内容本应通过编辑、评论方式补充,而不是写成一个答案,无意义的内容:赞、顶、同问等毫无意义的内容,垃圾广告信息:广告、招聘、推广、测试等内容,不符合答题规范:内容不是答案,可用评论、投票替代
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 App微信支付 - WangZiChen - 博客园
前言:下面介绍微信支付的开发流程的细节,图文并茂,你可以按照我的随笔流程过一遍代码。包你也学会了微信支付。而且支付也是面试常问的内容。
1、首先在开始使用微信支付之前,有一些东西是开发者必须要知道的,打开下面链接:
  然后可以看到下面的页面,这个就是微信支付商户平台的开发文档,很多东西是可以查阅和了解的,在开发使用微信SDK支付功能的时候,遇到了问题也可以到这找找相关须知信息:
  然后,还要告诉读者,点击这个开发文档中的" 支付账户&支付账户 ",然后滚动当前页面到最下面可以看到关于APPID:
  注意:这个APPID是开发中使用微信支付必须要用的东西,而这个APPID也只有商户通过在该微信支付平台注册,花个300元,填写很多相关重要信息,还要上传营业执照等必要手续,才能获取的APPID。
  而商业app应用程序,在客户使用app微信消费,程序会根据这个唯一的APPID,查找到商户,然后把消费者的金额数传递到商户的账户里。
  对开发者的福利:对于开发者,微信支付平台提供了测试的Demo,也在Demo源码中提供了有用的用于测试代码的APPID。这样开发者就除去了花个300元买个APPID的必要性。
2、为了读者能够更便利以及更针对性的学习这个微信SDK的使用过程,本人就建立一个普通的工程,直接在上面简易的使用微信SDK,并完成微信支付。
  点进去之后下载SDK,另外也要把Demo下载下来,可以带你参考学习源码的使用,也可以留着以后进一步的探究:
  在新建的工程里,我们把下载的SDK拖进去,下载的SDK文件中有五个文件,那个read_me.txt可以不用留着工程里,随你喜欢,但是可以打开阅读里面的提示信息:
  我们先打开read_me.txt文件,其实里面就是讲了最近几个版本的更新中解决的问题,以及使用该SDK的注意事项,红色框框起来的部分我在后面的操作中都会用上,SO这个read_me文件很重要的哦。
3、好,我们就按照read_me.txt做一下必须要做的流程:
  Xcode 7版本之后需要导入一下框架和链接库:
  如果是XCode 7之前,估计还需要手动导入Foundation.framework、UIKit.framework等框架。
  接着,按照read_me.txt的提示,我们把那段plist代码拷贝到info.plist文件中:
1 &key&LSApplicationQueriesSchemes&/key&
3 &string&weixin&/string&
4 &/array&
5 &key&NSAppTransportSecurity&/key&
7 &key&NSAllowsArbitraryLoads&/key&
  然后将info.plist文件切换为Property list显示视图,你就会看到多了两项:
  App Transport Security Settings是XCode7以后就需要开发中手动添加设置的,因为iOS9默认限制了http协议的访问。
  LSApplicationQueriesSchemes是可以将要使用的URL Schemes列为白名单,这样当前应用可以使用微信的相关能力(分享、收藏、支付、登录等)。
  最后还有一个操作哦,将微信支付要用到的APPID设置为URL Schemes [英 ski:m]。
4、好,我们可以开始敲代码了:
  我们可以打开微信支付平台下载的Demo程序,可以在它的AppDelegate的源码中找到测试用的APPID:
  然后回到自己建立的工程中,写下了微信支付的流程:
  既然要注册微信,那么我们先到微信SDK的头文件中查看一下,发现只提供了两个注册方法,注释也写的很清楚:
  然后我们导入这个头文件之后,直接根据已经有的APPID进行注册:
  好,其实步骤:1、导入微信支付SDK,注册微信支付。然后2、设置微信APPID为URL Schemes前面已经做好了。
  然后我们需要进行3、发起支付,调其微信支付,在这之前,我们直接看看微信官方提供给我们的Demo:
  最后我们找到了Demo中完整的可以直接用的这部分发起微信支付的源码:
  将这段直接拷贝到我的工程中,有那么一点经验的开发者就会注意到一些,比如Demo源码使用了MRC的autorelease,你可以手动去掉,类方法可以换成实例方法,根据你的实际项目开发需求:
1 - (NSString *)jumpToBizPay {
3 //============================================================
// V3&V4支付流程实现
// 注意:参数配置请查看服务器端Demo
// 更新时间:日
//============================================================
NSString *urlString
= @"http://wxpay./pub_v2/app/app_pay.php?plat=ios";
//解析服务端返回json数据
//加载一个NSURL对象
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
//将请求的url数据放到NSData对象中
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
if ( response != nil) {
NSMutableDictionary *dict = NULL;
//IOS5自带解析类NSJSONSerialization从response中解析出数据放到字典中
dict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
NSLog(@"url:%@",urlString);
if(dict != nil){
NSMutableString *retcode = [dict objectForKey:@"retcode"];
if (retcode.intValue == 0){
NSMutableString *stamp
= [dict objectForKey:@"timestamp"];
//调起微信支付
PayReq* req
= [[PayReq alloc] init];
req.partnerId
= [dict objectForKey:@"partnerid"];
req.prepayId
= [dict objectForKey:@"prepayid"];
req.nonceStr
= [dict objectForKey:@"noncestr"];
req.timeStamp
= stamp.intV
req.package
= [dict objectForKey:@"package"];
= [dict objectForKey:@"sign"];
[WXApi sendReq:req];
//日志输出
NSLog(@"appid=%@\npartid=%@\nprepayid=%@\nnoncestr=%@\ntimestamp=%ld\npackage=%@\nsign=%@",[dict objectForKey:@"appid"],req.partnerId,req.prepayId,req.nonceStr,(long)req.timeStamp,req.package,req.sign );
return @"";
return [dict objectForKey:@"retmsg"];
return @"服务器返回错误,未获取到json对象";
return @"服务器返回错误";
  哦,对了,还有一个很简单但很必要的操作忘记展示出来了:
  进一步,我们在微信的SDK源码头文件中,可以找到两个很有用的方法,你也可以在微信支付平台打开开发者文档找到这两个方法的介绍:
  然后我将其运用在我的工程中
  好,就这样,步骤:3、发起微信支付,调起微信&到这里就完成了。
  最后还需要做的就是,处理返回微信支付返回信息,使用了微信知否功能,不管是支付成功和失败,甚至还是用户自己取消支付,都会需要返回当前应用,并返回相关的信息。
  这里就需要用到微信SDK的处理返回信息的代理协议和代理方法了:
  在微信SDK的头文件中,我们可以找到protocol协议:
  好,我们也官方Demo中看看它是如何使用的:
  而我们只需要使用下面红色框框起来的部分代码,直接拷贝拿来使用:
  回到我的简易工程中,直接粘贴在里面用:
  那么这里面的返回信息中主要就有两个东西:resp.errCode错误码 和 resp.errStr错误原因,这两个东西在实际开发中经常遇到,所以也是面试会问到的一个细节。
  接着你可以通过点进连接:&可以在官方开发文档中找到:
  然后,根据实际开发需求,我们可能还需要回传微信app的相关信息:
  在当前AppDelegate.m文件添加一个代理方法:
5、到这里,就完成了整个微信支付的使用流程,下面可以用你的真机进行测试了,因为模拟器不好安装微信。微信支付文档 - 简书
微信支付文档
微信支付文档1.微信支付简介a)功能简介b)支付账户c)支付方式d)账号测试2.JS API支付接口a)支付场景b)功能交互c)获取当前微信版本号d)显示微信安全支付标题e)JS API支付接口(getBrandWCPayRequest)定义f)订单详情(packge)扩展字符串定义g)支付签名(paySign)生成方法h)接口使用实例3.Native(原生)支付接口a)支付场景b)基本交互c)Native(原生)支付接口描述d)Native(原生)支付URL定义e)Native(原生)支付URL签名方式f)Native(原生)支付回调商户后台获取package4.通知接口说明a)通知接口简介b)补单机制c)通知接口参数d)后台通知结果返回e)后台通知签名方式5.API接口说明a)API接口简介b)API使用方式c)API列表i.发货通知delivernotifyii.订单查询orderquery1.微信支付简介1.1功能简介微信支付,是基于微信客户端提供的支付服务功能。同时向商户提供销售经营分析、账户和资金管理的技术支持。用户通过扫描二维码、点击图文消息进入商品页面购买等多种方式调起微信支付模块完成支付。目前微信支持公众号内支付。其中支付方式,可以分为JS API支付、Native(原生)支付。商户可以结合业务场景,自主选择支付形式。本文将全面介绍公众号支付技术解决方案。1.2支付账户商户向微信公众平台提交企业信息以及银行账户资料,审核通过并签约后,可以获得以下帐户(包含财付通的相关支付资金账户),用于公众号支付。账号及其作用appId公众号身份唯一标识。appSecret公众平台API(参考文档API接口部分)的权限获取所需密钥Key,在使用所 有公众平台API时,都需要先用它去换取access_token,然后再进行调。paySignKey公众号支付请求中用于加密的密钥Key,可验证商户唯一身份,PaySignKey对应于支付场景中的appKey值。partnerId财付通商户身份标识。partnerKey财付通商户权限密钥Key。注意:appSecret、paySignKey、partnerKey是验证商户唯一性的安全标识,请妥善保管。对于appSecret和paySignKey的区别,可以这样认为:appSecret是API使用时的登录密码,会在网络中传播的;而paySignKey是在所有支付相关数据传输时用于加密并进行身份校验的密钥,仅保留在第三方后台和微信后台,不会在网络中传播。1.3支付方式公众号支付有2种方式:JS API支付:是指用户打开图文消息或者扫描二维码,在微信内置浏览器打开网页进行的支付。商户网页前端通过使用微信提供的JS API,调用微信支付模块。这种方式,适合需要在商户网页进行选购下单的购买流程。Native(原生)支付:是指商户组成符合Native(原生)支付规则的URL链接,用户可通过点击该链接或者扫描对应的二维码直接进入微信支付模块(微信客户端界面),即可进行支付。这种方式,适合无需选购直接支付的购买流程。以上两种支付方式,最大的差别在于是否需要经过网页调起支付。1.4测试账号名称及其取值appIdwxf8b4f85f3a794e77appSecretd01a3fe64d53f36892dfpaySignKey2Wozy2aksie1puXUBpWD8oZxiD1DfQuEaiC7KcRATv1Ino3mdopKaPGQQ7TtkNySuAmCaDCrw4xhPY5qKTBl7Fzm0RgR3c0W aVY IXZARsxzHV2x7iwPPzOz94dnwPWSnpartnerIdpartnerKey53e9cf7b0519d2.JSAPI支付接口2.1支付场景以下是支付场景的交互细节,请认真阅读,并设计商家页面的逻辑:(1)用户打开商户网页选购商品,发起支付,在网页通过JavaScript调用getBrandWCPayRequest接口,发起微信支付请求,用户进入支付流程。(2)商户设定订单轮询频率,前端开始轮询商户后台是否收到交易成功通知。若某时刻收到通知,即刷新前端页面。订单查询请参考下文的订单查询的API接口。(3)用户成功支付点击完成按钮后,商户的前端会收到JavaScript的返回值。此时,若商家已收到后台成功的通知,则向用户展示支付成功;若未收到支付成功的后台通知,需 要后台再主动发起查询订单状态请求,前端显示结果,不能只依靠前端的JavaScript返回值。 简单地说,支付成功务必以后台状态为准,前端判断为辅。注:(3)中的JS API返回值只在支付成功时返回,但并不表示JS API无返回或者有其 他返回值时就一定失败。鉴于以上极少数的情况,微信团队建议商户在调起微信支付后,前 端页面能够提供用户主动查询订单状态的入口,待用户结束支付流程回到商户网页前端界面时能够主动触发商户后台主动查询订单结果。以上会影响用户的支付成功体验,请仔细阅读并设计好网页处理逻辑。2.2功能交互商品类型图文消息或者通过二维码扫描进入商品网页内调用JS API支付,点击立即购买进入输入支付密码环节,密码成功后进入支付成功界面,最后返回商家页面提示发货。2.3获取当前微信版本号由于微信5.0版本后才加入微信支付模块,低版本用户调用微信公众号支付将无效。因 此,微信团队建议商户通过user agent来确定用户当前的版本号后再调用支付接口 。以iPhone版本为例,可以通过user agent可获取如下微信版本示例信息:"Mozilla/5.0(CPU iphone OS 5_1_1 like Mac OS X)AppleWebKit/534.46(KHTML,like Geocko) Mobile/9B206 MicroMessenger/5.0"其中5.0为用户安装的微信版本号,商户可以判定版本号是否高于或者等于5.0。2.4显示微信安全支付标题对于商户具有支付权限且需要调用微信支付的页面,为了让用户增加购买信心,确认交 易环境安全,微信强烈建议商户使用“微信安全支付”标题。显示支付安全标题,除了需要商户具有支付权限,还需将原始链接添加上"showwxpaytitle=1"的尾串。通过这种方式,商户的页面将出现微信安全支付的标识。例如,原始url为:htp://,显示安全支付标题的url为: htp://?showwxpaytitle=1。当用户在微信里打开不会直接出现微信安全支付的标题,而打开htp://?showwxpaytitle=1后将出现微信安全支付标题。2.5JSAPI支付接口(getBrandWCPayRequest)定义微信JS API只能在微信内置浏览器中使用,其他浏览器调用无效。微信提 供getBrandWCPayRequest接口供商户前端网页调用,调用之前微信会鉴定商户支付权限,若 商户具有调起支付的权限,则将开始支付流程 。这里主要介绍支付前的接口调用规则,支付 状态消息通知机制请参加下文。接口需要注意:所有传入参数都是字符串类型!getBrandWCPayRequest参数以及返回值定义参数以及是否必须填写和说明appId:必填:字段名称:公众号字段来源:商户注册具有支付权限的公众号成功后即可获得;传入方式:由商户直接传入。参数类型:字符串类型timestamp:必填:字段名称:时间戳;字段来源:商户生成从日00:00:00至今的秒数,即当前的时间,且最终需要转换为字 符串形式;由商户生成后传入。 参数类型:字符串类型;参数长度: 32个字节以下。nonceStr:必填:字段名称:随机字符串;字段来源:商户生成的随机字符串 。 由商户生成后传入。参数类型:字符串类型;参数长度: 32个字节以下。Package:必填:字段名称:扩展字符串;参数类型:字符串类型;字段来源:商户将订单信息组成该字符串,具体组成方案参见接口使用说 明中package组包帮助;由商户按照规范拼接后传入。 参数类型:字符串类型;参数长度: 4096个字节以下。signType:必填:字段名称:签名方式;参数类型:字符串类型;字段来源:按 照文档中所示填入,目前仅支持SHA1;参数类型:字符串类型;参数取值: "SHA1"。paySign:必填:字段名称:签名;字段来源:商户将接口列表中的参数按照指 定方式进行签名,签名方式使用signType中标示的签名方式,具体签名方案参见接口使用说明中签名帮助;由商户按照规范 签名后传入。参数类型:字符串类型;参数长度: 40个字符。返回结果返回值:err_msgget_brand_wcpay_request:ok支付成功注:JSAPI的返回结果get_brand_wcpay_request:ok仅在用户成功完成支付时返回,其他情 况下函数将无返回或返回其他无意义的结果,商户可以不予理会,更不应该以其他返回值作为判定支付成功或失败的条件。2.6订单详情(package)扩展字符串定义在商户调起JS API时,商户需要此时确定该笔订单详情,并将该订单详情通过一定的 方式进行组合放入package。JS API调用后,微信将通过package的内容生成预支付单。下 面将定义package的所需字段列表以及签名方法。package所需字段参数及其是否必填和说明bank_type:必填:银行通道类型,由于这里是使用的微信公众号支付,因此 这个字段固定为WX,注意大写。参数取值:"WX"。Body:必填:商品描述。参数长度:128字节以下。Attach:非必填:附加数据,原样返回。128字节以下。Partner:必填:商户号,即注册时分配的partnerId。out_trade_no:必填:商户系统内部的订单号,32个字符内、可包含字母,确保在商 户系统唯一。参数取值范围:32字节以下。total_fee:必填:订单总金额,单位为分。fee_type:必填:现金支付币种,取值:1(人民币),默认值是1,暂只支持1.notify_url:必填:通知URL,在支付完成后,接收微信通知支付结果的URL,需给绝对径路,255字符内,格式如:/tenpay.asp。取值范围:255字节以内。spbill_create_ip:必填:订单生成的机器IP,指用户浏览器端IP,不是商户服务器IP,格式为IPV4整型。取值范围:15字节以内。time_start:非必填:交易起始时间,也是订单生成时间,格式 为yyyyMMddHHmmss,如日9点10分10秒表示为10。时区为GMT+8 beijing。该时 间取自商户服务器。取值范围:14字节。time_expire:非必填:交易结束时间,也是订单失效时间,格式 为yyyyMMddHHmmss,如日9点10分10秒表示为10。时区为GMT+8 beijing。该时 间取自商户服务器。取值范围:14字节。transport_fee:非必填:物流费用,单位为分。如果有值,必须保证transport_fee + product_fee=total_fee。product_fee:非必填:商品费用,单位为分。如果有值,必须保证transport_fee + product_fee=total_fee。goods_tag:非必填:商品标记,优惠券时可能用到。input_charset:必填:传入参数字符编码。取值范围: "GBK"、"UTF-8"。默认: "GBK"。package生成方法由于package中携带了生成订单的详细信息,因此在微信将对package里面的内容进行鉴权,确定package携带的信息是真实、有效、合理的。因此,这里将定义生成package字符串的方法。a.对所有传入参数按照字段名的ASCII码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2...)拼接成字符串string1;b.在string1最后拼接上key=paternerKey得到stringSignTemp字符串,并对stringSignTemp进行md5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。c.对string1中的所有键值对中的value进行urlencode转码,按照a步骤重新拼接成字符串,得到string2。对于js前端程序,一定要使用函数encodeURIComponent进行urlencode编码(注意!进行urlencode时要将空格转化为%20而不是+)。d.将sign=signValue拼接到string1后面得到最终的package字符串。下面定义了一段生成package字符串的示范过程:假设以下为package传入参数:bank_type=WX;fee_type=1,body=XXX,input_charset=GBK,partner=,total_fee=1,spbill_create_ip=127.0.0.1out_trade_no= ,notify_url=i :经过a过程url键值对字典序排序后的字符串string1为:bank_type=WX&body=XXX&fee_type=1&input_charset=GBK?ify_url=&out_trade_no=&partner=&spbill_create_ip=127.0.0.1&total_fee=1ii:经过b过程后得到sign为:sign=md5(string1&key=53e9cf7b0519d).toUpperCase=md5(bank_type=WX&body=XXX&fee_type=1&input_charset=GBK?ify_url=&out_trade_no=&partner=&spbill_create_ip=127.0.0.1&total_fee=1&key=53e9cf7b0519d).toUpperCase()="beef37adc1e4b1474ca9".toUpperCase()=”BEEF37ADC1E4B1474CA9”iii:再对string1中的每一个键值对中的value进行urlencode编码后得到:bank_type=WX&body=XXX&fee_type=1&input_charset=GBK?ify_url=http%3a%2f%&out_trade_no=&partner=&spbill_create_ip=127.0.0.1&total_fee=1iv:拼接上sign后得到最终package结果:bank_type=WX&body=XXX&fee_type=1&input_charset=GBK?ify_url=http%3a%2f%&out_trade_no=&partner=&spbill_create_ip=127.0.0.1&total_fee=1&sign=BEEF37ADC1E4B1474CA92.7支付签名(paySign)生成方法paySign字段是对本次发起JS API的行为进行鉴权,只有通过了paySign鉴权,才能继 续对package鉴权并生成预支付单。这里将定义paySign的生成规则。参与paySign签名的字段包括: appid、timestamp、noncestr、package以及appkey。这里signType并不参与签名。对所有待签名参数按照字段名的ASCII码从小到大排序(字典序)后,使用URL键值 对的格式(即key1=value1&key2=value2...)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符,例如appId在排序后字符串则为对string1作签名算法,字段名和字段值都采用原始值(此时package的value就对应了使用2.6中描述的方式生成的package),不进行URL转义。具体签名算法为paySign=SHA1(string)。这里给出生成paySign的具体示例如下:假设参数如下:"appId":"wxf8b4f85f3a794e77","timeStamp":"","nonceStr":"adssdasssd13d","package":"bank_type=WX&body=XXX&fee_type=1&input_charset=GBK?ify_url=http%3a%2f%&out_trade_no=&partner=&spbill_create_ip=127.0.0.1&total_fee=1&sign=BEEF37ADC1E4B1474CA9"a pp K e y ”: " 2 W o z y 2 a k s i e 1 p u X U B p W D 8 o Z x i D 1 D f Q uE a i C 7 K c R A T v 1 I n o 3 m d o p K a P G Q Q 7 T t k NySuAmCaDCrw4xhPY5qKTBl7Fzm0RgR3c0WaVYIXZARsxzHV2x7iwPPzOz94dnwPWSn”i:经过a过程键值对排序后得到string1为:appid=wxf8b4f85f3a794e77&appkey=2Wozy2aksie1puXUBpWD8oZxiD1DfQuEaiC7KcRATv1Ino3mdopKaPGQQ7TtkNySuAmCaDCrw4xhPY5qKTBl7Fzm0RgR3c0WaVYIXZARsxzHV2x7iwPPzOz94dnwPWSn&noncestr=adssdasssd13d&package=bank_type=WX&body=XXX&fee_type=1&input_charset=GBK?ify_url=http%3a%2f%&out_trade_no=&partner=&spbill_create_ip=127.0.0.1&total_fee=1&sign=BEEF37ADC1E4B1474CA9×tamp=ii:经过b过程签名后可得到:paySign=SHA1(appid=wxf8b4f85f3a794e77&appkey=2Wozy2aksie1puXUBpWD8oZxiD1DfQuEaiC7KcRATv1Ino3mdopKaPGQQ7TtkNySuAmCaDCrw4xhPY5qKTBl7Fzm0RgR3c0WaVYIXZARsxzHV2x7iwPPzOz94dnwPWSn&noncestr=adssdasssd13d&package=bank_type=WX&body=XXX&fee_type=1&input_charset=GBK?ify_url=http%3a%2f%&out_trade_no=&partner=&spbill_create_ip=127.0.0.1&total_fee=1&sign=BEEF37ADC1E4B1474CA9×tamp=)=afe9a0de2.8接口使用示例接口需要注意:所有传入参数都是字符串类型!示例代码如下:WeixinJSBridge.invoke('getBrandWCPayRequest',{"appId" : "wxf8b4f85f3a794e77", //公众号名称,由商户传入"timeStamp" :"", //时间戳 这里随意使用了一个值"nonceStr" : "adssdasssd13d", //随机串"package":"bank_type=WX&body=XXX&fee_type=1&input_charset=GBK?ify_url=http%3a%2f%&out_trade_no=&partner=&spbill_create_ip=127.0.0.1&total_fee=1&sign=BEEF37ADC1E4B1474CA9",//扩展字段,由商户传入"signType": "SHA1", //微信签名方式:sha1"paySign": "afe9a0de" //微信签名},function(res){//返回res.err_msg,取值//get_brand_wcpay_request:cancel用户取消//get_brand_wcpay_request:fail发送失败//get_brand_wcpay_request:ok发送成功WeixinJSBridge.log(res.err_msg);alert(res.err_code+res.err_desc);});3.Native(原生)支付接口3.1支付场景(1)商户如果想具有Native(原生)支付的权限,除了需要填写申请支付权限的必须信息,还需要提供一个获取订单package的回调URL,以便微信后台通过Post的方式去获取该笔 支付的订单信息。(2)商户根据微信指定的规则制定用于微信支付的URL字符串,当用户点击该字符串,或 者通过扫描该字符串对应的二维码时,微信后台开始进入预支付流程。(3)微信后台鉴定权限后,通过Post方式向商户后台获取生成订单的必要信息,再次鉴定 获取的信息成功后,客户端将进入支付流程。(4)支付成功后,微信后台将通过Post机制通知商户后台该笔交易已成功。3.2基本交互商品类图文消息和商品二维码都可进行支付,直接支付,不需要经过网页,然后点击支付,进入输入密码环节,然后完成后就是支付成功。3.3Native(原生)支付接口描述Native(原生)支付过程中,首先需要商户定义符合Native(原生)支付规范的URL,也就是Native(原生)支付URL,同时需要在微信后台Post商户后台时需要提供package内容。因此这里将重点介绍支付前的接口调用,支付通知等信息请查看下文。3.4Native(原生)支付URL定义Native(原生)支付URL是一系列具有weixin://wxpay/bizpayurl?前缀的url,同时后面紧跟着一系列辨别商家的键值对。Native(原生)支付URL的规则如下:weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXXX&productid=XXXXXX×tamp=XXXXXX&noncestr=XXXXXX其中xxxxxx为商户需要填写的内容,具体参数定义如下:参数及其是否必填和说明appid:必填:字段名称:公众号字段来源:商户注册具有支付权限的公众 号成功后即可获得;传入方式:由商户直接传入。Timestamp:必填:字段名称:时间戳;字段来源:商户生成从日00: 00:00至今的秒数,即当前的时间;由商户生成后传入。取值 范围:32字符以下Noncestr:必填:字段名称:随机字符串;字段来源:商户生成的随机字符串;取值范围:长度为32个字符以下。由商户生成后传入。取值范围: 32字符以下Productid:必填:字段名称:商品唯一字段来源:商户需要定义并维护自己的 商品id,这个id与一张订单等价,微信后台凭借该id通过Post商户后台获取交易必须信息 。由商户生成后传入 。取值范围:32字符以下Sign:必填:字段名称:签名;字段来源:对前面的其他字段与appKey按照 字典序排序后,使用SHA1算法得到的结果。由商户生成后传入。3.5Native(原生)支付URL签名方式参与sign签名的字段包括:appid、timestamp、noncestr、productid以及appkey。a.对所有待签名参数按照字段名的ASCII码从小到大排序(字典序)后,使用URL键 值对的格式(即key1=value1&key2=value2...)拼接成字符串string1。这里需要注意的是所 有参数名均为小写字符,即appId则排序后的字符串则为b.对string1作签名算法,字段名和字段值都采用原始值,不进行URL转义。具体签名算法为sign=SHA1(string)。这里给出生成sign的具体示例如下:假设参数如下:"appid":"wxf8b4f85f3a794e77","timestamp":"","noncestr":"adssdasssd13d", "productid" :"123456"“appkey”:"2W ozy2aksie1puXUBpWD8oZxiD1DfQuEaiC7KcRA Tv1Ino3mdopKaPGQQ7TtkNySuAmCaDCrw4xhPY5qKTBl7Fzm0RgR3c0WaVYIXZARsxzHV2x7iwPPzOz94dnwPWSn”则经过a过程后得到:string1=“appid=wxf8b4f85f3a794e77&appkey=2Wozy2aksie1puXUBpWD8oZxiD1DfQuEaiC7KcRATv1Ino3mdopKaPGQQ7TtkNySuAmCaDCrw4xhPY5qKTBl7Fzm0RgR3c0WaVYIXZARsxzHV2x7iwPPzOz94dnwPWSn&noncestr=adssdasssd13d&productid=123456×tamp=”则经过SHA1处理后得到:sign=18ce946ae294e016eddda9468de80df3.6Native(原生)支付回调商户后台获取package在公众平台接到用户点击上述特殊Native(原生)支付的URL之后,会调用注册时填 写的商家获取订单Package的回调URL。假设回调URL为/cgi-bin/bizpaygetpackage微信公众平台调用时会使用Post方式,推送xml格式的PostData,形如:1 ure&参数说明:(1)AppId,公众帐号的appid(2)OpenId,点击链接准备购买商品的用户openid (3)IsSubscribe,标记用户是否订阅该公众帐号, 1为关注,0为未关注(4)ProductId,第三方的商品ID号(5)TimeStamp,时间戳(6)NonceStr,随机串(7)AppSignature,参数的加密签名,是根据2.7支付签名( paySign)生成方法中所讲的签名方式生成的签名(8)SignMethod,签名方式,目前只支持“SHA1”。该字段不参与签名。第三方为了确保是来自于微信公众平台的合法请求,需要使用同样的方式生成签名,并与AppSignature的值进行对比。参与签名的字段为:appid、appkey、productid、timestamp、noncestr、openid、issubscribe。 为了返回Package数据,回调URL必须返回一个xml格式的返回数据,形如:微信公众号支付接口文档V2.21 A[afecdacb9e]]&
其中,AppSignature依然是根据前文paySign所讲的签名方式生成的签名,参与签名的 字段为:appid、appkey、package、timestamp、noncestr、retcode、reterrmsg。package的生成规则请参考JS API所定义的package生成规则。这里就不再赘述了。其中,对于一些第三方觉得商品已经过期或者其他错误的情况,可以在RetCode和RetErrMsg中体现出来,RetCode为0表明正确,可以定义其他错误;当定义其他错误时,可以在RetErrMsg中填上UTF8编码的错误提示信息,比如“该商品已经下架”,客户端会 直接提示出来。4.通知接口说明4.1通知接口简介用户在成功完成支付后,微信后台通知( post)商户服务器(notify_url)支付结果。商户可以使用notify_url的通知结果进行个性化页面的展示。4.2补单机制对后台通知交互时,如果微信收到商户的应答不是success或超时,微信认为通知失败,微信会通过一定的策略(如30分钟共8次)定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。由于存在重新发送后台通知的情况,因此同样的通知可能会多次发送给商户系统 。商户系统必须能够正确处理重复的通知。微信推荐的做法是,当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回success。在对业务 数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混 乱。目前补单机制的间隔时间为: 8s、10s、10s、30s、30s、60s、120s、360s、1000s。4.3通知接口参数后台通知通过请求中的notify_url进行,采用post机制。返回通知中的参数一致, url包含如下内容:字段名:变量名:必填:类型:说明协议参数:签名方式:sign_type:否:String(8):签名类型,取值:MD5、RSA,默认:MD5接口版本:service_version:否:String(8):版本号,默认为1.0字符集:input_charset:否:String(8):字符编码,取值:GBK、UTF-8,默认:GBK。签名:sign:是:String(32):签名密钥序号:sign_key_index:否:Int:多密钥支持的密钥序号,默认1业务参数:交易模式:trade_mode:是:int:1-即时到账其他保留交易状态:trade_state:是:int:支付结果: 0—成功 其他保留支付结果信息:pay_info:否:String(64):支付结果信息,支付成功时为空商户号:partner:是:String(10):商户号,也即之前步骤的partnerid,由微信统一分配的10位正整数(120XXXXXXX)号付款银行:bank_type:是:String(16):银行类型,在微信中使用WX银行订单号:bank_billno:否:String(32):银行订单号总金额:total_fee:是:int:支付金额,单位为分,如 果discount有值,通知的total_fee + discount =请求的total_fee币种:fee_type:是:int:现金支付币种,目前只支持人 民币,默认值是1-人民币通知ID:notify_id:是:String(128):支付结果通知id,对于某些特 定商户,只返回通知id,要求 商户据此查询交易结果订单号:transaction_id:是:String(28):交易号,28位长的数值,其中前10位为商户号,之后8位为订单产生的日期,如,最后10位是流水号。商户订单号:out_trade_no:是:String(32):商户系统的订单号,与请求一致。商家数据包:attach:否:String(127):商家数据包,原样返回支付完成时间:time_end:是:String(32):支付完成时间,格式 为yyyyMMddhhmmss ,如日9点10分10秒 表示为10。时区 为GMT+8 beijing。物流费用:transport_fee:否:int:物流费用,单位分,默认0。 如果有值,必须保 证transport_fee+ product_fee = total_fee物品费用:product_fee:否:int:物品费用,单位分 。如果有值,必须保证transport_fee + product_fee=total_fee折扣价格:discount:否:int:折扣价格,单位分,如果有值,通知的total_fee + discount =请求的total_fee买家别名:buyer_alias:否:String(64):对应买家账号的一个加密串同时,在postData中还将包含xml数据。数据如下:1
各字段定义如下:参数:必填:说明AppId:是:字段名称:公众号字段来源:商户注册具有支付权限 的公众号成功后即可获得;传入方式:由商户直接传入。TimeStamp:是:字段名称:时间戳;字段来源:商户生成从日00:00:00至今的秒数,即当前的时间;由商户生成后 传入。取值范围:32字符以下NonceStr:是:字段名称:随机字符串;字段来源:商户生成的随机字符 串;取值范围:长度为32个字符以下。由商户生成后传入。 取值范围:32字符以下OpenId:是;支付该笔订单的用户ID,商户可通过公众号其他接口为付 款用户服务。AppSignature:是:字段名称:签名;字段来源:对前面的其他字段与appKey按照字典序排序后,使用SHA1算法得到的结果。由商户生成后传入。IsSubscribe:是:用户是否关注了公众号。1为关注,0为未关注。AppSignature依然是根据前文paySign所述的签名方式生成,参与签名的字段为:appid、appkey、timestamp、noncestr、openid、issubscribe。从以上信息可以看出, url参数中携带订单相关信息,postData中携带该次支付的用户 相关信息,这将便于商家拿到openid,以便后续提供更好的售后服务。4.4后台通知结果返回微信后台通过notify_url通知商户,商户做业务处理后,需要以字符串的形式反馈处理结果,内容如下:返回结果:结果说明success:处理成功,微信系统收到此结果后不再进行后续通知fail或其它字符:处理不成功,微信收到此结果或者没有收到任何结果,系统通过补单机 制再次通知4.5后台通知签名方式对于url中签名原始串按以下方式组装成字符串:a.除sign字段外,所有参数按照字段名的ascii码从小到大排序后使用QueryString的格 式(即key1=value1&key2=value2...)拼接而成字符串string1,空值不传递,不参与签名组串。b.在string1最后拼接上key=paternerKey得到stringSignTemp字符串,并 对stringSignTemp进行md5运算,再将得到的字符串所有字符转换为大写,得到sign值signV alue。c.对string1进行urlencode转码,得到string2。d.将sign=signValue拼接到string1后面得到最终的notifyargs字符串。e.所有参数是指通信过程中实际出现的所有非空参数,即使是接口中无描述的字段,也需要参与签名组串 。f.签名原始串中,字段名和字段值都采用原始值,不进行URLEncode。g.微信通知消息可能会由于升级增加参数,请验证应答签名时注意允许这种情况。下面定义了一段生成notifyargs字符串的示范过程:假设以下为notifyargs传入参数: bank_billno= ,bank_type=0,discount=0,fee_type=1,input_charset=GBK,notify_id=WE37gwCoFBcAKdkH34Y1nW94r_vao2ljmwE3oAHEeAP690xSVhRleOMfhsgjwVGDpluT-vdS79kbDbkDnjYg4qsmTdSjuJxl,out_trade_no=809900, partner= , product_fee=1,sign_type=MD5, time_end=31 , total_fee=1,trade_mode=1,trade_state=0,transaction_id=5397, transport_fee=0i:经过a过程url键值对字典序排序后的字符串string1为:bank_billno=&bank_type=0&discount=0&fee_type=1&input_charset=GBK?ify_id=WE37gwCoFBcAKdkH34Y1nW94r_vao2ljmwE3oAHEeAP690xSVhRleOMfhsgjwVGDpl uT-vdS79kbDbkDnjYg4qsmTdSjuJxl&out_trade_no=809900&partner=&product_fee=1&sign_type=MD5&time_end=31&total_fee=1&trade_mode=1&trade_state=0&transaction_id=5397&transport_fee=0ii:经过b过程后得到sign为:sign=md5(string1&key=53e9cf7b0519d).toUpperCase=md5(bank_billno=&bank_type=0&discount=0&fee_type=1&input_charset=GBK?ify_id=WE37gwCoFBcAKdkH34Y1nW94r_vao2ljmwE3oAHEeAP690xSVhRleOMfhsgjwVGDpluT-vdS79kbDbkDnjYg4qsmTdSjuJxl&out_trade_no=809900&partner=&product_fee=1&sign_type=MD5&time_end=31&total_fee=1&trade_mode=1&trade_state=0&transaction_id=5397&transport_fee=0&key=53e9cf7b0519d).toUpperCase()="8ef1f69d5d9d4ec39d24e".toUpperCase()=”8EF1F69D5D9D4EC39D24E”iii:再对string1经过c过程urlencode编码后得到:bank_billno=&bank_type=0&discount=0&fee_type=1&input_charset=GBK?ify_id=WE37gwCoFBcAKdkH34Y1nW94r_vao2ljmwE3oAHEeAP690xSVhRleOMfhsgjwVGDpluT-vdS79kbDbkDnjYg4qsmTdSjuJxl&out_trade_no=809900&partner=&product_fee=1&sign_type=MD5&time_end=31&total_fee=1&trade_mode=1&trade_state=0&transaction_id=5397&transport_fee=0iv:拼接上sign后得到最终package结果:bank_billno=&bank_type=0&discount=0&fee_type=1&input_charset=GBK?ify_id=WE37gwCoFBcAKdkH34Y1nW94r_vao2ljmwE3oAHEeAP690xSVhRleOMfhsgjwVGDpluT-vdS79kbDbkDnjYg4qsmTdSjuJxl&out_trade_no=809900&partner=&product_fee=1&sign_type=MD5&time_end=31&total_fee=1&trade_mode=1&trade_state=0&transaction_id=5397&transport_fee=0&sign=8EF1F69D5D9D4EC39D24E5.API接口说明5.1API接口简介为了更好地接入支付的整个流程,包括购买、通知、发货等,微信提供了一系列的支付 相关API,以供第三方调用。5.2API使用方式在使用API之前,需要拥有API使用过程中用到的具有时效性的凭证access_token。这 个获取方式就是使用前文提到的appid和appsecret调用token这个api获取。更详细的文档 请参考:http://mp./wiki说明文档中的通用接口。只有拥有了有效access_token (即相当于具有了一定时间内的API登陆态)后续的所有API调用才会成功。5.3API列表5.3.1发货通知delivernotify为了更好地跟踪订单的情况,需要第三方在收到最终支付通知之后,调用发货通知API告知微信后台该订单的发货状态。请在收到支付通知发货后,一定调用发货通知接口,否则可能影响商户信誉和资金结算。Api的url为:https://api./pay/delivernotify?access_token=xxxxxxUrl中的参数只包含目前微信公众平台凭证access_token,而发货通知的真正的数据是放在PostData中的,格式为json,如下:{"appid" : "wwwwb4f85f3a797777","openid" : "oX99MDgNcgwnz3zFN3DNmo8uwa-w","transid" : "333","out_trade_no" : "555666uuu","deliver_timestamp" : "","deliver_status" : "1","deliver_msg" : "ok","app_signature" :"53cca9d47b883bd4a5c85acb48565c", "sign_method" :"sha1"}其中,appid是公众平台账户的AppId;openid是购买用户的OpenId,这个已经放在最终支付结果通知的PostData里了; transid是交易单号;out_trade_no是第三方订单号;deliver_timestamp是发货时间戳,这里指得是linux时间戳;deliver_status是发货状态,1表明成功,0表明失败,失败时需要在deliver_msg填上失败原因;deliver_msg是发货状态信息,失败时可以填上UTF8编码的错误提示信息,比如“该商品已退款”;app_signature依然是根据1中所讲的签名方式生成的签名,参加签名字段为: appid、appkey、openid、transid、out_trade_no、deliver_timestamp、deliver_status、deliver_ sign_method是签名方法(不计入签名生成);微信公众平台在校验ok之后,会返回数据表明是否通知成功,例如: {"errcode":0,"errmsg":"ok"}如果有异常,会在errcode和errmsg描述出来,如果成功errcode就为0。5.3.2订单查询orderquery因为某一方技术的原因,可能导致商家在预期时间内都收不到最终支付通知,此时商家 可以通过该API来查询订单的详细支付状态。Api的url为:https://api./pay/orderquery?access_token=xxxxxxUrl中的参数只包含目前微信公众平台凭证access_token,而发货通知的真正的数据是 放在PostData中的,格式为json,如下:{"appid" : "wwwwb4f85f3a797777","package" : "out_trade_no=11122&partner=&sign=4e8d0df3da0c3d0df38f","timestamp" : "","app_signature" :"53cca9d47b883bd4a5c85acb48565c","sign_method" : "sha1"}其中,appid是公众平台账户的AppId;package是查询订单的关键信息数据,包含第三方唯一订单号out_trade_no、财付通商户身份标识partner(即前文所述的partnerid)、签名sign,其中sign是对参数字典序排序并使用&联合起来,最后加上&key=partnerkey(唯一分配),进行md5运算,再转成全大写,最终得到sign,对于示例,就是:sign=md5(out_trade_no=11122&partner=&key=xxxxxx ).timestamp是linux时间戳;app_signature依然是根据1中所讲的签名方式生成的签名,参加签名字段为:appkey、package、sign_method是签名方法(不计入签名生成);微信公众平台在校验ok之后,会返回数据表明是否通知成功,例如: {"errcode":0,"errmsg":"ok", ...... }如果有异常,会在errcode和errmsg描述出来,如果成功errcode就为0。如果查询成功,会返回详细的订单数据,如下:{"errcode":0, "errmsg":"ok","order_info":{"ret_code":0,"ret_msg":"","input_charset":"GBK","trade_state":"0", "trade_mode":"1","partner":"","bank_type":"CMB_FP", "bank_billno":"","total_fee":"1","fee_type":"1","transaction_id":"3741","out_trade_no":"6457300","is_split":"false","is_refund":"false","attach":"","time_end":"43","transport_fee":"0","product_fee":"1","discount":"0", "rmb_total_fee":""} }对于详细的订单信息,放在order_info中的json数据中,各个字段的含义如下: ret_code是查询结果状态码,0表明成功,其他表明错误;ret_msg是查询结果出错信息;input_charset是返回信息中的编码方式;trade_state是订单状态,0为成功,其他为失败;trade_mode是交易模式,1为即时到帐,其他保留; partner是财付通商户号,即前文的 bank_type是银行类型;bank_billno是银行订单号;total_fee是总金额,单位为分;fee_type是币种,1为人民币;transaction_id是财付通订单号;out_trade_no是第三方订单号;is_split表明是否分账,false为无分账,true为有分账; is_refund表明是否退款,false为无退款,ture为退款;attach是商家数据包,即生成订单package时商家填入的 time_end是支付完成时间;transport_fee是物流费用,单位为分; product_fee是物品费用,单位为分;discount是折扣价格,单位为分;rmb_total_fee是换算成人民币之后的总金额,单位为分,一般看total_fee即可。付接口
礼堂钟声,被敲打,幸福的密码}

我要回帖

更多关于 如何在微信上开店 的文章

更多推荐

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

点击添加站长微信