微信支付接口中为什么demo中提供的js调用微信分享接口不到支付界面

微信定制开发系列二——地理位置接口、扫一扫接口和微信支付接口|微信定制开发,上海微信定制-稻壳互联,定制您的互联网
微信定制开发系列二——地理位置接口、扫一扫接口和微信支付接口
使用"扫一扫"即可发送至手机
上期写了开发系列一——H5调用微信JS-SDK,主要是讲解了微信目前可以实现那些功能和其中的SDK的配置以及分享接口的使用。今天主要讲解的接口主要有获取地理位置接口、扫一扫接口以及微信支付接口。为什么要讲上述三个接口呢,其实主要是这三个接口需要注意下,其他接口我就略过不讲了,使用方法参考官方的api即可。那么接下来就是干货了。地理位置接口:wx.getLocation({
&&&&type:&'wgs84',&//&默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
&&&&success:&function&(res)&{
&&&&&&&&var&latitude&=&res.&//&纬度,浮点数,范围为90&~&-90
&&&&&&&&var&longitude&=&res.&//&经度,浮点数,范围为180&~&-180。
&&&&&&&&var&speed&=&res.&//&速度,以米/每秒计
&&&&&&&&var&accuracy&=&res.&//&位置精度
});上述是使用方法,需要注意的是微信获取地理位置的接口只提供坐标,只提供坐标,只提供坐标,重要的事情说三遍,但是大部分功能需求是需要获取地址的,但是微信坑爹的不提供这个接口,因此只能通过百度、高德等地图去根据这里获取的坐标再获取详细的地理位置。扫一扫接口:wx.scanQRCode({
&&&&needResult:&0,&//&默认为0,扫描结果由微信处理,1则直接返回扫描结果,
&&&&scanType:&[&qrCode&,&barCode&],&//&可以指定扫二维码还是一维码,默认二者都有
&&&&success:&function&(res)&{
&&&&var&result&=&res.resultS&//&当needResult&为&1&时,扫码返回的结果
});扫一扫接口主要就是需要注意needResult的参数,如果扫一扫之后需要自己处理就只能选择1,然后就是success里面根据res.resultStr处理即可。微信支付接口:我相信微信支付接口是使用频率相当高的一个接口,所以今天的重头戏主要是这里。我们先看看官方的调用demowx.chooseWXPay({
&&&&timestamp:&0,&//&支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
&&&&nonceStr:&'',&//&支付签名随机串,不长于&32&位
&&&&package:&'',&//&统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
&&&&signType:&'',&//&签名方式,默认为'SHA1',使用新版支付需传入'MD5'
&&&&paySign:&'',&//&支付签名
&&&&success:&function&(res)&{
&&&&&&&&//&支付成功后的回调函数
});其实微信支付的重点并不是怎么调用这个js,而是怎么去得到这个js所需要的参数,关于这些参数的获取请参考,服务端通过统一支付接口获取到preay_id之后进行签名,之后就是划重点时间:1、chooseWXPay里面的timestamp等参数一定要跟服务端参与签名的值一样,并不是js这里再单独生成相应的值。2、微信支付常见的错误大多数有两种,第一是万恶的签名错误,第二则是眼睁睁看到将要弹出了微信支付界面,结果弹出了一个对话框支付失败之类的错误消息。处理签名错误的方法一般是用官方的签名校正工具和自己的签名参数做比较,如果不匹配那就检查下自己传入的值问题,如果签名匹配那就检查下是否参加签名的参数是否漏掉了。解决了签名参数问题,还是不能支付的时候,那就说明js的值不对,一个是我上面提到的js传入的参数一定是要跟参加签名参数的值相同,一般做法是直接服务端传一个json对象。另外一个问题就是当前页面的地址和微信后台微信支付模块输入的地址不匹配。地址只需要设置到二级或者三级目录即可,然后就是把当前页面的地址复制出来跟微信后台填写的地址一一做比较,包括大小写,包括大小写,包括大小写。我曾经就是因为大小写白白浪费了几个小时的时间找问题所在,这是血和泪的教训。
阅读相关主题
微信开发从这里出发
你可能会喜欢
您也可以通过以下方式直接联系客服
手机扫码联系客服
免费咨询热线
关注稻壳获得更多互联网定制方案
微信公众号主题 : 在Cocos游戏中接入微信支付
级别: 侠客
可可豆: 171 CB
威望: 161 点
在线时间: 63(时)
发自: Web Page
来源于&&分类
在Cocos游戏中接入微信支付&&&
本帖被 fysp 执行加亮操作()
上次我们通过手动的加密接入了一些微信的api,这次我们继续把微信支付功能接入到猫狗大战中,顺带把页面加密也更换为动态加密方式。(上次的帖子:)首先打开:jssdk相关说明都在这里,我们这次需要接入的微信支付在页面最底下为了省事,我们直接使用微信的demo来搭建后端环境:下载使用公众号发起支付请求的demo。并且解压出php版本(完整地址:)将整个文件夹复制进需要接入支付的页面文件夹,然后打开WxPayPubHelper/WxPay.pub.config.php文件,配置里面的相关参数
JS_API_CALL_URL需要填入支付页面的地址然后在微信中访问index.php,并点击JSapi支付demo。这时候我们会看到好多PHP报错信息。。。原来是demo中的CURLOPT_TIMEOUT写成了CURLOP_TIMEOUT。。。这是什么情况。。。根据提示的文件和行数改之:WxPayPubHelper.php  821 WxPayPubHelper.php  155WxPayPubHelper.php  175 将这行注释掉curl_close($ch)我们将js_call_.php  83行的WeixinJSBridge.log(res.err_msg);改成alert(res.err_msg):运行发现,页面还是报错,弹出了getBrandWCPayRequest:fail_no permission to execute查找各种文档后发现,原来是配置的支付目录和现在测试的目录不匹配造成的。我们打开公众平台,点击微信支付-开发配置
如果只是测试使用,则填写支付测试的目录和允许测试的微信号,待测试通过后,发布到线上的地址,再填写支付配置的支付目录。(注意demo中的支付链接其实在/demo/文件夹内,所以要填写)到这里就一切就绪了,点击贡献一下,正常的弹出了支付对话框。
我们现在开始接入原先的游戏:之前我们在游戏中实现了wifi的检测以及右上角菜单的消失和显示(点击游戏上方的显示菜单和隐藏菜单,右上角的三个。。。菜单会相应的显示和消失),但之前我们用的是静态的加密方式,现在我们把它改成动态的。首先我们在刚刚的文档页面把jssdk的demo下载下来,将php的demo复制出来,并且将我们之前的wecat游戏copy到网站目录下,然后将index.html改成index.php。并在头部增加部分php代码初始化sdk(分别填入AppID和AppSecret)
然后把jssdk.php文件中所有的json读取都改成:file_get_contents(dirname(__FILE__) . &/jsapi_ticket.json&);增加dirname(__FILE__) . 否则会读取到入口php的相对路径。最后修改wx.config
试试在微信中打开游戏,已经能够动态生成加密数据了。然后将demo/js_api_call.php内头部的php代码复制到index.php头部,最后增加一个赞助的链接。搞定!!
看看完成后的页面叭,记得在微信中打开。
附上完整的代码,替换其中的appid等参数就行了。
(219 K) 下载次&#2
常见的问题:1.支付页面跳转提示uri错误:打开公众平台开发者中心,在接口权限表里面找到 “网页授权获取用户基本信息” 点击修改,然后设置成需要跳转的域名2.支付跳转页面白屏无反应: 检查php是否打开了curl,如果没有打开curl,会一直停留在空白页面3.fail_no permission to execute:支付配置的目录和当前目录不匹配,到支付设置中增加一个目录地址就行了[ 此帖被visualsj在 16:15重新编辑 ]
级别: 新手上路
可可豆: 145 CB
威望: 135 点
在线时间: 124(时)
发自: Web Page
谢谢楼主,收藏了
Flax是基于Flash和Cocos2d的游戏创作利器,极致简练!网站:http://flax.so, 秋群:
级别: 新手上路
可可豆: 15 CB
威望: 5 点
在线时间: 5(时)
发自: Web Page
伪前排,收藏了,顺便顶一个
级别: 新手上路
可可豆: 18 CB
威望: 18 点
在线时间: 175(时)
发自: Web Page
万分感谢,亲人呐!受我一摆
级别: 侠客
UID: 433008
可可豆: 704 CB
威望: 469 点
在线时间: 766(时)
发自: Web Page
非常感谢,收藏了
级别: 新手上路
UID: 237521
可可豆: 108 CB
威望: 72 点
在线时间: 341(时)
发自: Web Page
这个必须定了!
级别: 侠客
UID: 413125
可可豆: 267 CB
威望: 258 点
在线时间: 283(时)
发自: Web Page
论坛出BUG了 无法发新帖子了??
级别: 侠客
UID: 224041
可可豆: 211 CB
威望: 216 点
在线时间: 383(时)
发自: Web Page
学习~~~~~~~~~~~~~~~~~~~~~~~~~
级别: 新手上路
可可豆: 1 CB
威望: 1 点
在线时间: 4(时)
发自: Web Page
我申请公众号的时候注意到,只有企业主体申请服务号并认证,然后才能提交各种材料申请微信支付业务,而且查询到相关的类目也没有游戏。想问下楼主是怎么申请下来的?
级别: 新手上路
可可豆: 4 CB
威望: 4 点
在线时间: 10(时)
发自: Web Page
已收藏,谢谢分享
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版微信支付开发当前URL未注册的解决方案 - ThinkPHP框架
微信支付开发当前URL未注册的解决方案流程实现
1. OAuth2.0授权
JSAPI 支付前需要调用 登录授权接口获取到用户的 Openid 。所以需要做一次授权,这次授权是不弹出确认框的。
其实质就是在用户访问http://www.fangbei.org/wxpay/js_api_call.php时跳转到https://open./connect/oauth2/authorize?appid=wx8888&redirect_uri=http://www.fangbei.org/wxpay/js_api_call.php&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect以此来获得code参数,并根据code来获得授权access_token及openid
其实现的详细流程可参考 微信公众平台开发(71)OAuth2.0网页授权
在微信支付的Demo中,其代码为
1&//使用jsapi接口
&2&$jsApi&=&new&JsApi_pub();
&4&//=========步骤1:网页授权获取用户openid============
&5&//通过code获得openid
&6&if&(!isset($_GET['code']))
&8&&&&&//触发微信返回code码
&9&&&&&$url&=&$jsApi-&createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);
10&&&&&Header(&Location:&$url&);&
13&&&&&//获取code码,以获取openid
14&&&&&$code&=&$_GET['code'];
15&&&&&$jsApi-&setCode($code);
16&&&&&$openid&=&$jsApi-&getOpenId();
17&}这一步的最终结果就是获得了当前用户的openidou9dHt0L8qFLI1foP-kj5x1mDWsM
2. 统一支付
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口
统一支付中以下参数从配置中获取,或由类自动生成,不需要用户填写$this-&parameters[&appid&]&=&WxPayConf_pub::APPID;//公众账号ID
$this-&parameters[&mch_id&]&=&WxPayConf_pub::MCHID;//商户号
$this-&parameters[&spbill_create_ip&]&=&$_SERVER['REMOTE_ADDR'];//终端ip&&&&&&&&
$this-&parameters[&nonce_str&]&=&$this-&createNoncestr();//随机字符串
$this-&parameters[&sign&]&=&$this-&getSign($this-&parameters);//签名在JSAPI支付中,另外填写以下参数//统一支付接口中,trade_type为JSAPI时,openid为必填参数!
$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这些参数最终组成了这样的xml数据,&xml&
&&&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://www.fangbei.org/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&
&/xml&将这些数据提交给统一支付接口https://api.mch./pay/unifiedorder将获得返回 如下数据&xml&
&&&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&&
&/xml&其中包含了最重要的预支付ID参数,prepay_id,值为 wx
3、JS API支付
前面的准备工作做好了以后,JS API根据prepay_id生成jsapi支付参数
生成代码如下
//=========步骤3:使用jsapi调起支付============$jsApi-&setPrepayId($prepay_id);
$jsApiParameters&=&$jsApi-&getParameters();生成的json数据如下{
&&&&&appId&:&&wx8888&,
&&&&&timeStamp&:&&&,
&&&&&nonceStr&:&&gbwr71b5no6q6ne18c8up1u7l7he2y75&,
&&&&&package&:&&prepay_id=wx&,
&&&&&signType&:&&MD5&,
&&&&&paySign&:&&9CF851EBF6C7D&
}在微信浏览器中调试起js接口,代码如下&html&
&&&&&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&
&/html&当用户点击“贡献一下”按钮时,将弹出微信支付插件,用户可以开始支付。
4、支付通知
支付成功后,通知接口中也将收到支付成功的xml通知&xml&
&&&appid&&![CDATA[wx8888]]&&/appid&&&
&&&bank_type&&![CDATA[CFT]]&&/bank_type&&&
&&&fee_type&&![CDATA[CNY]]&&/fee_type&&&
&&&is_subscribe&&![CDATA[Y]]&&/is_subscribe&&&
&&&mch_id&&![CDATA[]]&&/mch_id&&&
&&&nonce_str&&![CDATA[60uf9sh6nmppr9azveb2bn7arhy79izk]]&&/nonce_str&&&
&&&openid&&![CDATA[ou9dHt0L8qFLI1foP-kj5x1mDWsM]]&&/openid&&&
&&&out_trade_no&&![CDATA[wx79]]&&/out_trade_no&&&
&&&result_code&&![CDATA[SUCCESS]]&&/result_code&&&
&&&return_code&&![CDATA[SUCCESS]]&&/return_code&&&
&&&sign&&![CDATA[0C1D7F550A5A138F0CEB]]&&/sign&&&
&&&sub_mch_id&&![CDATA[]]&&/sub_mch_id&&&
&&&time_end&&![CDATA[58]]&&/time_end&&&
&&&total_fee&1&/total_fee&&&
&&&trade_type&&![CDATA[JSAPI]]&&/trade_type&&&
&&&transaction_id&&![CDATA[4026]]&&/transaction_id&&
&/xml&当然这是所有的支付流程,我们还需要去微信公众号后台去设置。支付授权目录
这里很重要我就是在这里折腾了很久。怎么设置呢,首先要看你支付的当前页面URL
比如是:http://www.fangbei.org/wxpay/js_api_call.php你就必须填写:http://www.fangbei.org/wxpay/假如是:http://www.fangbei.org/wxpay/order/id/56.html你就必须写:http://www.fangbei.org/wxpay/order/id/看出规律了吧,就是把最后一个反斜杠后面的内容去掉就OK了。如果还有什么问题可以留言问我。
积分:2157
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

我要回帖

更多关于 js怎么调用微信接口 的文章

 

随机推荐