用 微信下单付款 提示: 统一下单和拉起支付的appid不一致 怎么办?

公司为一个系统提供了微信下单公众号服务使用nutz框架自带的微信下单集成功能,其中可以做一些微信下单公众后台的一些功能

如何开发微信下单公众号支付功能
第一步、先把需要用的东西都准备好
开发环境,已经认证的微信下单公众号已经认证微信下单商户,以及可外网访问的域名这些都不细说叻。当然我是基于nutz框架集成的微信下单功能来开发的我尽量细化过程,让所有的java开发人员能更轻松掌握了解其中微信下单官方文档已經说明的事项,这里就不会再仔细说明但会提示!

1、域名:首先请准备好一个可外网访问的域名。我使用的是nutz社区提供的内网穿透工具一个挺好用的东西,在这里贴出链接:网上也有很多工具,大家自己动手查找配置要确保能外网访问,已有域名的可以不需要;
2、微信下单公众号:首先搜索“微信下单公众平台”打开登录首页,使用准备好的公众号登录进入首页后
1-点击【公众号设置】->【功能设置】
2-设置两个地方为你所要使用的域名,只是域名不需要http之类的字符
3-点击【基本配置】,配置“服务器配置”下的相关内容然后选择啟用,此处相关配置不作详解
注意:微信下单公众号所需要的配置已经完成接下来都与之无关。之后所需要的相关参数请自行查看保存以便使用。
请注意保存几个比较重要的参数nutz框架都有相关配置
3、微信下单商户平台:搜索“微信下单商户平台”,打开首页登录进去登录需要安装控件
比较重要的事来了:首先大家请注意,此处有你的商户id即参数Mch_id
我之前上网查过资料,有人说Mchid是官方返回的邮件中的8位数字也看到了说此处就是Mchid,经过亲身体验我可以告诉你,这个10位数字就是Mchid没有错,至于邮件我只是开发人员,没看到我也不知噵获取Mchid后,到下一个重要的参数地方去
还是在【账户中心】点击【操作证书】-【申请安装】
然后就是发送验证码,安装操作证书的步驟不详写,自己动手
安装完操作证书后,还是在【账户中心】点击【API安全】,此处由于个人原因将引用他人经验,大家可点击链接查阅相关配置:其中涉及到一个重要参数“API秘钥”,即后面我们所要使用到的参数:key请设置好之后妥善保存并记录,微信下单方将鈈予显示
API秘钥设置好之后,点击【产品中心】-【开发配置】(此处也显示了Mchid)配置“支付配置”下的“公众号支付”,请点击 【添加】按钮选择添加支付授权目录。JSPAI支付授权目录设置要求官方有说明必须是你请求支付的路径,并以“/”结尾
值得注意说明的是这个目录的意义到底是什么?我怎么才能确定我设置的是支付目录
通过查阅资料和亲自测试,就此来说明一下:
通过任何途径访问到一个支付页面可以输入money后点击付款,弹出支付界面输入密码的那样一个页面
如上页面中输入金额后,点击【立即充值】弹出付款界面
这就昰所谓的支付页面,请在此页面点击右上角的三个点点击【复制链接】,粘贴出来查看你的URL比如我的URL是:,那么你的JSAPI支付授权目录就是:“”,至于能不能设置到“…/aaaa/”这里还有待验证,我估计应该也是可以的如果你的URL最后是个页面,例如“”,则和上面同样设置即可


支付授权目录设置好之后,接下来就要写代码了。
以上有关微信下单后台的相关设置全部搞定,之后所设计的操作不再进行配置动莋再有相关的事,我想就是查看官方文档了

第三步、第一次发送请求参数,获得返回参数
1-包装全部所需要的请求参数;
其中所有参数說明请查看官方文档的【统一下单】
这里我只使用必须要用到的参数一共有10个参数,请看代码

以上代码已经尽量说明不明白的可以再問我。官方文档是将所有参数以XML格式给的此处是用nutz框架内置的NutMap包装所有参数,传到后台进行解析其中NutMap实质就是Map;
此处强调,官方文档給了一个接口链接:URL地址:一开始我没弄懂这个到底用来干嘛的,后来看了别人的经验才有所领悟当然此处是nutz框架已经封装好了方法,这里直接调用想看如何调用,请查看

所有参数的名称、释义、示例、是否必须在官方文档中都有指出,看文档就能明白的这里不洅解释,接下来就说说比较有歧义的地方;(这里只针对必须参数)
nonce_str——随机字符串——32位以内数字,字母都ok不必纠结
sign——签名——這是第一次出现签名的地方,此sign是将你所有的请求参数按照ASCII字典排序后按照规定格式拼接成字符串,再使用MD5加密后生成最后再加入到請求参数中发送到微信下单端接口;加密方式也可以用HMAC-SHA256方式
body——商品详情——此处任意填写,建议此处值先使用英文测试
notify_url——微信下单异步调用的URL用来返回用户支付的结果,此处填写的地址同样需要添加到JSAPI支付授权目录下添加方式和之前一样
trade_type——交易类型——此处直接填写JSAPI,微信下单公众号支付
openid——用户标识——交易类型为JSAPI此参数为必选
注意:sign的生成比较重要,请一定保证参数名包括其大小写下划线偠与官方文档一致参数值要符合标准,加密sign之前要打印你所拼接的字符串,查看是否准确发送请求数据之前请打印出来,查看所有參数及其值是否正确另外所有参数的值均为String类型。

2-接收微信下单端返回的数据
请求参数发送之后无论请求数据是否异常,微信下单端均返回XML格式数据请自行解析;返回的数据中,其中return_code和result_code值均为SUCCESS时表示你的请求成功了,如果失败请参考return_msg的值,自行解决问题再请求荿功后,大家可以看到其中有个参数名为sign,没错这个也是签名,这是第二次出现签名的地方不同的是这个签名是微信下单端返回的,它的作用主要是用来验证这些返回的数据是否是微信下单端返回的官方文档中在提供的demo中有个方法是用来验证此类签名的,贴出来一點方法给大家有兴趣的可以自己下载

* 判断签名是否正确,必须包含sign字段否则返回false。使用MD5签名 * 判断签名是否正确,必须包含sign字段否則返回false。

所以此处的sign唯一的作用就是用来验证的能看到SUCCESS就很开心了,这个验证就算了吧我想尽快到下一步;
所以最重要的东西来了,峩们之前费了那么大劲去发送请求然后接收一堆这些参数,不可能就这点作用当然,主角还是它:prepay_id最主要的就是要拿到这个参数和咜的值,官方文档中解释其为:预支付交易会话标识有效期为2小时;其实就是预支付订单的id,只不过这个id是微信下单端生成的人家只承认自己的id,主要用于下一步的请求参数所以再接下来

3-发送交易请求参数,调起微信下单支付;
很重要、很关键、很激动的一步因为這一步完成了,你就完成了99%的工作了就能见到心仪已久的内个选择支付方式,输入密码或者指纹支付的弹框了!!!
此步骤所需要的必須参数一共有6个其实所有参数也只有6个,以下分别说明:
appId——公众号id——就是之前用的那个appid此处注意appId的I要大写
nonceStr——随机字符串——就矗接用之前的生成方式生成即可,同时注意参数名大小写
package——订单详情扩展字符串——它的值比较特别格式为:prepay_id=########;注意仅此参数名为全部尛写字母
signType——签名方式——仅支持MD5,啥也别想直接一个“MD5”OK了;
paySign——签名——再次注意,这是第三次出现签名的地方此处的签名生成方式依然和第一次的签名一样,先排序组成特定字符串后再用MD5方式加密;

注意:现在来详细说明一下这个paySign的生成:什么都不必多说我直接给你一个字符串格式:

请把字符串signStr中的所有XXX替换成你自己的值,可能会有人奇怪上面的字符串参数中少了paySign,却多了一个key说明你没有認真看官方文档中的签名生成方式。除了paySign这个参数我们需要将之前说明的其它5个参数按照字典排序组好字符串,最后才能加上key这个参数这个key就是之前设置的微信下单商户的秘钥,不知道的请查看本文档的第二步第3条的第3点这里使用的就是那个秘钥。最后把这一串字符串MD5加密后就生成了paySign

,请将上面说的6个参数原封不动的封装发送到前台页面前台调用接口的方法里的参数值,请全部从后台获取请在調用接口之前打印你获取参数的形式是否准确的获取了后台的参数,避免因前端取值原因造成怀疑后台出错!我曾经因为此原因在后台調试了一个上午,最后发现是页面取值的原因请大家引以为戒!
前端页面的调用方法官方文档有写,这里贴出来说明一下

请大家使用这個方式调用微信下单支付参数请从后台发送到前台,方法最后有个回调函数function(res){}参数res是返回的请求结果,其中参数err_msg为”get_brand_wcpay_request:ok”时表示调用成功这时才会弹出支付框,如果有调用失败的情况可以alert(err_desc);来查看微信下单端返回的错误信息

微信下单订单的查看和微信下单退款等功能后续洅完善,另外微信下单端会在用户支付完成后请求异步回调结果通知请大家参考官方文档做好处理,及时返回信息给微信下单端其中涉及到第四次出现参数sign,其作用依然和第二次出现的sign一样用于信息真实性的验证。

最后祝大家开发公众号和支付顺利完成!!!

公司最近要搞微信下单支付, 之前吔没有做过, 但是搞过阿里云, 想来也不是很难. 在网上找了很多贴子, 在eclipse里做了5个测试工程, 没有测试成功, 后来下了微信下单SDK, 也做了个测试样例, 期間参考了: 

这个是需要公司去注册与申请的, 

第三步, 开通支付模式, 这里要是扫码支付(Native支付), 支付模式介绍见: 

第四步, 把工程导入eclipse, 完整如下图:

以丅是完整代码, 搞多了大家不理解, 就一个类:

 
 
 
 
 * 场景:刷卡支付、公共号支付、扫码支付、APP支付
 
 
 
 
 
 

代码里的 [公众号APPID], [商户号], [key], [发起电脑 ip] 这几个换成自己公司的或自己客户的相关内容

统一下单接口说明: 调用代码成功收到微信下单的回复, 这个测试是微信下单返回一个二维码连接 code_url, 拿到 code_url内容之后, 洎己可以用google二维码工具显示到jsp页面上, 然后用手机扫描支付.  只要后台代码能与微信下单交互, 有没有页面都不重要. 

订单查询接口: 这样列子中下單之后, 自己的代码要每隔2-3秒查询一次微信下单, 看看订单是不是支付成功了,  成功了说明客户支付了.

实现不同主体公众号的跨公众号支付其实原理很简单就下面几点:

1、用一个公众号的appid来进行收款
2、这个公众号的appid需要和商户号绑定

进过上面三步是不是就对应起来了~

怎麼才能在别的主体的公众号用我的appid来获得用户的openid呢?

其实很简单你可以在需要支付的页面进行一次获取code的重定向操作,获取code的url内的appid,写你洎己的appid就好了后端拿code获取openid时也用我们自己的appid和appsecret。

其实只要理解了微信下单官方的网页授权机制就很容易理解当我们获取code之前是不是构慥了类似下面的url

可以发现里面有个appid,这就是微信下单官方验证的依据,当我们获取openid的时候回传三个参数appid,appsecret和code,这时微信下单官方就会拿code去找之湔url内的appid,来对比和code一起传过去的appid,如果一致就返回openid,如果不一致,则提示错误

而跨公众号支付也是一样,他们不匹配我让他匹配不就完了嘛
偠是这个公众号下的openid不行,我用自己的appid重新获取一个匹配的不就完了嘛

1、需要在收款公众号appid下配置可访问的回调域名(web安全域名/js安全域名/業务域名)
2、在商户号的开发配置中设置支付页面的url,否则不能完成支付

我要回帖

更多关于 微信下单 的文章

 

随机推荐