㈠ 微信支付商户签名错误
官方文档内容如下:
备注:prepay_id 通过微信支付统一下单接口拿到,paySign 采用统一的微信支付 Sign 签名生成方版法,注意这里 appId 也要参权与签名,appId 与 config 中传入的 appId 一致,即最后参与签名的参数有appId, timeStamp, nonceStr, package, signType。
其实根本不是这么回事,完全是扯犊子,参与签名的参数根本不不上面列出的,
实际的签名字符串应该是:"appId="+appId+"&nonceStr="+noncestr + "&package=prepay_id="+prepay_id+"&signType=MD5&timeStamp="+timestamp+"&key="+key
这里的key是微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置
这里设置的密钥。
腾讯他娘的狗屎文档,写得真他娘烂。
㈡ 微信小程序如何获取本机蓝牙mac地址
流程是这样的:先初始化蓝牙适配器,然后获取本机蓝牙适配器的状态,然后开始搜索,当停止搜索以后在开始搜索,就会触发蓝牙是配置状态变化的事件,搜索完成以后获取所有已经发现的蓝牙设备,就可以将devices中的设备Array取出来了。然后就可以得到所有已经连接的设备了,至于链接功能,还没有真机可测,所以没有测试。
我的电脑上蓝牙连接的设备:
以下是案例代码:
// pages/bluetooth/bluetooth.js
Page({
data:{},
onLoad:function(options){
// 页面初始化 options为页面跳转所带来的参数
},
//初始化蓝牙适配器
openBluetooth:function(){
wx.openBluetoothAdapter({
success: function(res){
console.log(res.errMsg)
// success
wx.showToast({
title:"初始化蓝牙适配器成功",
ration:2000
})
},
})
},
//关闭蓝牙模块
closeBluetooth:function(){
wx.openBluetoothAdapter()
wx.closeBluetoothAdapter({
success: function(res){
// success
console.log("success"+res)
}
})
},
//获取本机蓝牙适配器状态
getBluetoothAdapterState:function(){
wx.getBluetoothAdapterState({
success: function(res){
// success
console.log("res:"+res)
console.log("errMsg:"+res.errMsg)
}
})
},
//监听蓝牙适配器状态变化事件
onBluetoothAdapterStateChange:function(){
wx.onBluetoothAdapterStateChange(function(res) {
console.log(`adapterState changed, now is`, res)
})
},
// 开始搜寻附近的蓝牙外围设备
:function(){
wx.({
success: function (res) {
console.log(res)
}
})
},
// 停止搜寻附近的蓝牙外围设备
stopBluetoothDevicesDiscovery:function(){
wx.stopBluetoothDevicesDiscovery({
success: function (res) {
console.log(res)
}
})
},
//获取所有已发现的蓝牙设备
getBluetoothDevices:function(){
wx.getBluetoothDevices({
success: function(res){
// success
console.log(res)
},
})
},
//监听寻找到新设备的事件
onBluetoothDeviceFound:function(){
wx.onBluetoothDeviceFound(function(res) {
// callback
console.log(res)
})
},
//根据 uuid 获取处于已连接状态的设备
getConnectedBluetoothDevices:function(){
wx.getConnectedBluetoothDevices({
success: function (res) {
console.log(res)
}
})
},
//连接低功耗蓝牙设备
createBLEConnection:function(){
wx.createBLEConnection({
deviceId: 'AC:BC:32:C1:47:80',
success: function(res){
// success
console.log(res)
},
fail: function(res) {
// fail
},
complete: function(res) {
// complete
}
})
},
//断开与低功耗蓝牙设备的连接
closeBLEConnection:function(){
wx.closeBLEConnection({
deviceId: 'AC:BC:32:C1:47:80',
success: function (res) {
console.log(res)
}
})
},
//监听低功耗蓝牙连接的错误事件,包括设备丢失,连接异常断开等等
onBLEConnectionStateChanged:function(){
wx.onBLEConnectionStateChanged(function(res) {
console.log(`device ${res.deviceId} state has changed, connected: ${res.connected}`)
})
},
//获取蓝牙设备所有 service(服务)
getBLEDeviceServices:function(){
wx.getBLEDeviceServices({
deviceId: '48:3B:38:88:E3:83',
success: function(res){
// success
console.log('device services:', res.services.serviceId)
},
fail: function(res) {
// fail
},
complete: function(res) {
// complete
}
})
},
//获取蓝牙设备所有 characteristic(特征值)
getBLEDeviceCharacteristics:function(){
wx.getBLEDeviceCharacteristics({
deviceId: '48:3B:38:88:E3:83',
serviceId: 'serviceId',
success: function(res){
// success
},
fail: function(res) {
// fail
},
complete: function(res) {
// complete
}
})
}
})
㈢ 关于微信支付遇到的哪些坑
最近在研究微信支付,感觉在微信里面买东西,直接微信支付还是蛮方便的,没有支付宝那么麻烦,刷刷朋友圈,顺便就买点东西,生活是如此的惬意,心想微信的这个支付肯定可以做到很牛逼,因为“钱景”无限啊!于是,我开始了这个噩梦般的旅程。
开通和审核
微信支付和支付宝商家平台一样,都是要审核资质的,支付宝个人认证可以使用担保支付,虽然需要用户确认收货之后才能收到资金,但是好歹也是能用的。微信直接不让个人使用支付。只有企业以上级别的服务号才能申请。
开通&认证
支付宝注册企业账号,进行企业认证,我总共就花了10分钟,包括公司资质审核,打款到公账确认公账等步骤。效率高到简直无法想象。 微信支付需要已经认证过的服务号才能开通支付。提交完资质,等待审核,花了5个工作日的时间才告诉我资质审核过了,对,没错,是5个工作日,中间隔了一个周末,微信称2-7个工作日认证完成,还是实现诺言了。
开通支付
支付宝需要签约服务,这里我签约的是即时到帐的,花了2天时间。 微信开通认证之后,登陆商户平台配置一下就可以开干了,这点从速度方面比支付宝强点,因为它把支付用途啥的都放到第一步的认证里面了,而支付宝是放在后面的签约服务里面进行审核的。
这些步骤完成之后,就可以开始开发了。虽然如此,从整体进度上面,支付宝还是略胜微信一筹的。
开发
根据文档接入支付宝和微信的支付平台
文档&DEMO
支付宝我就没看文档,因为之前有做过,已经大体了解了。直接下了个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.weixin.qq.com/wiki/doc/api/index.php?chapter=9_1
微信支付签名算法:http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=4_3
微信支付开发教程:https://mp.weixin.qq.com/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" : "wx2421b1c4370ec43b", //公众号名称,由商户传入
"timeStamp":" 1395712654", //时间戳,自1970年以来的秒数
"nonceStr" : "", //随机串
"package" : "prepay_id=u802345jgfjsdfgsdg888",
"signType" : "MD5", //微信签名方式:
"paySign" : "" //微信签名
},
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);
}
}else{
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" ) {
//支付成功
}else{
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->proct->brief_desc);//商品描述
$unifiedOrder->setParameter("body", $order->proct->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("proct_id", $order->proct->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" ) {
//支付成功
}else{
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位字符串。设置完了,自己记下来,没错,要自己记下来,因为没法再查看了。
㈣ 微信resupdate是什么文件夹
resetupdate是一种清除更新标志的文件夹。当某行在删除缓冲区中时,或者在主缓冲区或过滤缓冲区中,并且状态为NewModified!或DataModified!时,其更新标志被设置。
㈤ 从空间分享到微信朋友圈的日志打开为啥出现undefined啊
undefined的意思是未定义的,你清楚一下浏览器缓存看看。
㈥ 微信支付报商户签名错误
1,建议调试过程 用微信自带的demo编码 静态的试试 看有没有问题
2.没有问题的话 一个个的替换参数
3.手动通过验证工具计算 加密数据 看和i自己生成的 加密数据是否一致
㈦ 微信支付成功后,微信回调值是空的,怎么解决
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
<?php echo $jsApiParameters;?>,
function(res){
WeixinJSBridge.log(res.err_msg);
if(res.err_msg == "get_brand_wcpay_request:ok"){ //这个地方是判断支付成功!
}
}
);
}
㈧ 微信function中的res是什么意思
res是response(n. 响应;反应;回答)的缩写,用来接收服务端返回的数据。
㈨ 微信公众号里,点击一个自定义菜单,然后弹出扫一扫框,可以吗如果可以怎样实现呢
可以调起微信扫一扫接口,详情可见开发者文档