微信js sdk 支付 js sdk 返回的状态可靠吗

微信JS SDK 接口调用详解_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
微信JS SDK 接口调用详解
&&最新2015年1月微信JS 接口调用
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩22页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢版权所有 &
本站内容未经许可,不允许转载微信支付的那些坑!
最近在研究微信支付,感觉在微信里面买东西,直接微信支付还是蛮方便的,没有支付宝那么麻烦,刷刷朋友圈,顺便就买点东西,生活是如此的惬意,心想微信的这个支付肯定可以做到很牛逼,因为“钱景”无限啊!于是,我开始了这个噩梦般的旅程。
开通和审核
微信支付和支付宝商家平台一样,都是要审核资质的,支付宝个人认证可以使用担保支付,虽然需要用户确认收货之后才能收到资金,但是好歹也是能用的。微信直接不让个人使用支付。只有企业以上级别的服务号才能申请。
支付宝注册企业账号,进行企业认证,我总共就花了10分钟,包括公司资质审核,打款到公账确认公账等步骤。效率高到简直无法想象。 微信支付需要已经认证过的服务号才能开通支付。提交完资质,等待审核,花了5个工作日的时间才告诉我资质审核过了,对,没错,是5个工作日,中间隔了一个周末,微信称2-7个工作日认证完成,还是实现诺言了。
支付宝需要签约服务,这里我签约的是即时到帐的,花了2天时间。 微信开通认证之后,登陆商户平台配置一下就可以开干了,这点从速度方面比支付宝强点,因为它把支付用途啥的都放到第一步的认证里面了,而支付宝是放在后面的签约服务里面进行审核的。
这些步骤完成之后,就可以开始开发了。虽然如此,从整体进度上面,支付宝还是略胜微信一筹的。
根据文档接入支付宝和微信的支付平台
支付宝我就没看文档,因为之前有做过,已经大体了解了。直接下了个DEMO改改就完成了。 微信的文档,恩,在微信公众平台有一份,在商户平台又有另外一份,而且内容还不一样。。。 我主要需要在公众号里面支付,所以选择了微信的JSAPI。在公众平台里面,关于JS支付的只有一小段。如下:
wx.chooseWXPay({
timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: '', // 支付签名随机串,不长于 32 位
package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: '', // 支付签名
success: function (res) {
// 支付成功后的回调函数
备注:prepay_id 通过微信支付统一下单接口拿到,paySign 采用统一的微信支付 Sign 签名生成方法,注意这里 appId 也要参与签名,appId 与 config 中传入的 appId 一致,即最后参与签名的参数有appId, timeStamp, nonceStr, package, signType。
微信支付统一下单接口文档:http://pay./wiki/doc/api/index.php?chapter=9_1
微信支付签名算法:http://pay./wiki/doc/api/index.php?chapter=4_3
微信支付开发教程:https://mp./paymch/readtemplate?t=mp/business/course3_tmpl&lang=zh_CN
看完方法,有点晕,在看完下面给出的三个链接里面的内容,更晕了。然后又在商户平台找到一份文档。
这里给了比较详细的资料,也给出了js示例:
注:JS API的返回结果get_brand_wcpay_request:ok仅在用户成功完成支付时返回。由于前端交互复杂,get_brand_wcpay_request:cancel或者get_brand_wcpay_request:fail可以统一处理为用户遇到错误或者主动放弃,不必细化区分。
示例代码如下:
function onBridgeReady(){
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
&appId& : &wx0ec43b&,
//公众号名称,由商户传入
&timeStamp&:& &,
//时间戳,自1970年以来的秒数
&nonceStr& : &e61463f8efacccfbbb444&, //随机串
&package& : &prepay_id=u802345jgfjsdfgsdg888&,
&signType& : &MD5&,
//微信签名方式:
&paySign& : &70EABB79628FBCAFADD89& //微信签名
function(res){
if(res.err_msg == &get_brand_wcpay_request:ok& ) {}
// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回
ok,但并不保证它绝对可靠。
if (typeof WeixinJSBridge == &undefined&){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
onBridgeReady();
恩,于是我结合了文档和找到的demo,结合这一段内容开始测试,结果发现,完全没反应。是的,在我的iPhone上面是没有反应的,也许哪里出了问题,一直搞不出反应。 然后我想到了前面还有一种chooseWXPay,搜索了一下,这是新版接口的方法。结合下面的文档参数的计算,成功了。结果是这样的
wx.chooseWXPay({
appId: '{{ $jsParameters['appId'] }}',
timestamp: '{{ $jsParameters['timeStamp'] }}', // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: '{{ $jsParameters['nonceStr'] }}', // 支付签名随机串,不长于 32 位
package: '{{ $jsParameters['package'] }}', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
signType: '{{ $jsParameters['signType'] }}', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: '{{ $jsParameters['paySign'] }}', // 支付签名
success: function (res) {
if(res.errMsg == &chooseWXPay:ok& ) {
//支付成功
alert(res.errMsg);
cancel:function(res){
//支付取消
这里的$jsParameters是在后台使用微信支付的DEMO里面提供的class生成的。
include_once(&WxPayPubHelper.php&);
public function getParameters(Order $order)
$jsApi = new JsApi_pub();
$unifiedOrder = new UnifiedOrder_pub();
//$unifiedOrder-&setParameter(&detail&, $this-&order-&product-&brief_desc);//商品描述
$unifiedOrder-&setParameter(&body&, $order-&product-&name);//商品描述
$unifiedOrder-&setParameter(&out_trade_no&, $order-&order_number);//商户订单号
$unifiedOrder-&setParameter(&total_fee&, $order-&price * 100);//总金额,腾讯默认支付金额单位为【分】
$unifiedOrder-&setParameter(&notify_url&, WxPayConf_pub::NOTIFY_URL);//通知地址
$unifiedOrder-&setParameter(&trade_type&, &JSAPI&);//交易类型
//非必填参数,商户可根据实际情况选填
$unifiedOrder-&setParameter(&openid&, Auth::user()-&wx_openid);//商品ID
$unifiedOrder-&setParameter(&product_id&, $order-&product-&id);//商品ID
$prepay_id = $unifiedOrder-&getPrepayId();
$jsApi-&setPrepayId($prepay_id);
return $jsApi-&getParameters();
我描述你一脸啊,明显第一个是用户openid
支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
你很难搞清楚啥时候改用大写,啥时候该用小写。
备注:prepay_id 通过微信支付统一下单接口拿到,paySign 采用统一的微信支付 Sign 签名生成方法,注意这里 appId 也要参与签名,appId 与 config 中传入的 appId 一致,即最后参与签名的参数有appId, timeStamp, nonceStr, package, signType。
就是在调用chooseWXPay的时候,你要自己加上appId,注意,I是大写。否则采用JSAPI方式的时候会提示出错。
注:JS API的返回结果get_brand_wcpay_request:ok仅在用户成功完成支付时返回。由于前端交互复杂,get_brand_wcpay_request:cancel或者get_brand_wcpay_request:fail可以统一处理为用户遇到错误或者主动放弃,不必细化区分。
function(res){
if(res.err_msg == &get_brand_wcpay_request:ok& ) {}
// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回
ok,但并不保证它绝对可靠。
老版的接口里面是这样描述返回结果的。但是在新版里面变了,是变了,但是满世界找不到变成啥样了。只能自己打出来测试,结果变成如下
success: function (res) {
if(res.errMsg == &chooseWXPay:ok& ) {
//支付成功
新版接口里面取消是没有反应的,因为只有success回调。没有任何一个地方说了如何监听用户取消支付。只能自己猜,结果,我果然猜对了。
success: function (res) {
if(res.errMsg == &chooseWXPay:ok& ) {
//支付成功
alert(res.errMsg);
cancel:function(res){
//支付取消
你以为是res.errMsg == &chooseWXPay:cancel&吗?骚年,你还是太年轻。
1、要设置好安全支付目录。这个啥意思?
1、所有使用JS API方式发起支付请求的链接地址,都必须在支付授权目录之下;
2、最多设置3个支付授权目录, 且域名必须通过ICP备案;
3、头部要包含http或https,须细化到二级或三级目录,以左斜杠“/”结尾。
修改会影响线上交易,距正式生效有十分钟左右延迟,建议你避开交易高峰时间修改
就是说,你将要调用JSAPI的那个页面的链接要在这个目录之下才可以。否则,会弹出提示说你的目录没权限。比如你调用JSAPI的页面地址为
http://www.xx.oo/pay/order/1
那么你要把安全目录设置为
http://www.xx.oo/pay/order/
这样设置之后,如果你在如下地址调用,则会报错
http://www.xx.oo/pay/newOrder/1
你可以设置多个支付目录,如果需要的话。
2、设置回调地址,这个不解释。
3、设置警告地址,不解释。
4、商户平台里面设置密钥,在登录了商户平台之后,位于账户设置-API安全里面,先装数字证书,然后设置密钥,32位字符串。设置完了,自己记下来,没错,要自己记下来,因为没法再查看了。
本文已收录于以下专栏:
相关文章推荐
首先,我先简要说明一下微信支付开发的流程
      众所周知,工欲善其事,必先利其器,微信官方推出了web微信开发工具,有windows、linux、版本的,根据自己的开发环境选择合适自己的,现将连...
以下博文资料转自:
http://blog.csdn.net/Tom_xiaoxie/article/details/?locationNum=7&fps=1
Java版的微信支付开发
关于签名的算法,api提供的原文是:
1.签名算法
签名生成的通用步骤如下:
第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序...
此处拿微信支付来举例,支付宝支付同理
添加WXApiDelegate
//不同iOS版本的回调函数不同,但也大同小异,具体不再列举。
- (BOOL)application: (UIApplic...
微信的统一下单接口(https://api.mch./pay/unifiedorder)中,下单时,有这样一个参数:notify_url,该参数是为接收微信支付异步通知回调的...
微信jssdk支付功能-前端部分
$(function() {
$('a').on('click', function() {
onBridgeReady();
微信支付一个订单付款两次问题处理。
最近客户打电话说线上商城, 会员在线上商城购物偶尔会出现几个订单,存在一个订单支付两次的情况,这种问题是偶尔出现,一天出现1到2个订单,很奇怪,赶紧验证了下,...
他的最新文章
讲师:姜飞俊
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)10646人阅读
微信公众平台开发中,JS-SDK提供了很多实用的功能。操作微信界面、拍照、上传下载语音和图片、坐标获取、使用地图、微信支付 等都要用到JS-SDK,但是好多人不知道怎么用,其实不会用的都是没有仔细看开发文档,文档里写的还是比较详细的
文档地址:
使用时首先要注意引入js文件,然后最最重要的是要注意使用config接口注入权限验证配置,好多人都是没有做这一步然后却说微信垃圾,接口根本没办法使用
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名,见附录1
jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});当config函数执行成功后微信会回调wx.ready函数给通知,所有的操作一定要在wx.ready函数执行后进行
wx.ready(function(){});
这时候想使用其它接口就很简单了,微信文档都有详细的代码示例,直接复制就可以了,我这里贴出两个小例子
//获取网络状态
function getNetworkType(){
wx.getNetworkType({
success: function (res) {
var networkType = res.networkT // 返回网络类型2g,3g,4g,wifi
alert(networkType);
//调起扫一扫
function scanQRCode(needResult){
wx.scanQRCode({
needResult: needResult, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType: [&qrCode&,&barCode&], // 可以指定扫二维码还是一维码,默认二者都有
success: function (res) {
var result = res.resultS // 当needResult 为 1 时,扫码返回的结果
alert(result);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:30665次
排名:千里之外
原创:13篇
(2)(1)(1)(1)(1)(3)(1)(1)(1)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'市场合作,请您联系:
品牌广告合作,请您联系:
企业创新合作,请您联系:
地方合作,请您联系:
满足以下场景,获得更高通过率:
新融资求报道
新公司求报道
新产品求报道
创投新闻爆料
为你推送和解读最前沿、最有料的科技创投资讯
聚集15家顶级投资机构的专业互联网融资平台
聚集全球最优秀的创业者,项目融资率接近97%,领跑行业}

我要回帖

更多关于 微信js sdk 的文章

更多推荐

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

点击添加站长微信