你是否也遇到小程序卡卷签名错误,求解决~
2019-03-15 18:14:57
微信公开课小程序热门讨论关于「你是否也遇到小程序卡卷签名错误,求解决~」的小程序开发问题
补充:你是否也遇到小程序卡卷签名错误,求解决~
展开:微信小程序卡卷签名错误无法找到原因,希望这方面的大佬能正解万分感谢~最近开发微信小程序的时候遇到卡卷签名错误的问题,因为我是前端人员,不太懂后台,在网上各种找结果还是签名错误,让我很头痛,希望小程序这方面的大佬能正解一下,在下感激不尽后台已经成功获得签名并校验(这里有个小问题就是签名校验排序问题,我在我电脑测试的时候api_ticket与timestamp没有进行交换位置所以签名校验(地址:https:mpweixinqqcomdebugcgibinsandbox?t=cardsign)不一样,但是他们电脑出现位置交换(timestamp在第一个)),我们没有自定义code没有指定openid,所以这两个参数都没有用到后台代码:<?phpdefine(appID,$_POST[appid]);define(appsecret,$_POST[secret]);classJSSDK{private$appId;private$appSecret;publicfunction__construct($appId,$appSecret){$thisappId=$appId;$thisappSecret=$appSecret;}publicfunctiongetSignPackage(){获取access_token$TOKEN_URL=https:apiweixinqqcomcgibintoken?grant_type=client_credential&appid=$thisappId&secret=$thisappSecret;$json=file_get_contents($TOKEN_URL);$result=json_decode($json,true);$ACCESS_TOKEN=$result[access_token];echo$ACCESS_TOKEN<br<br;jsapiTicket$TOKEN_URL=https:apiweixinqqcomcgibinticketgetticket?access_token=$ACCESS_TOKEN&type=wx_card;$json=file_get_contents($TOKEN_URL);$result=json_decode($json,true);$api_ticket=$result[ticket];echo$jsapi_ticket<br<br;$jsapi_ticket=$thisgetJsApiTicket();$url=http:$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI];$card_id=$_POST[card_id];$timestamp=time();$nonceStr=$thiscreateNonceStr();$string=api_ticket=$api_ticket×tamp=$timestamp&nonce_str=$nonceStr&card_id=$card_id;$string=$timestamp$nonceStr$api_ticket$card_id;echo<br<br;$arr=array($card_id,$api_ticket,$nonceStr,$timestamp);asort($arr,SORT_STRING);$string=;foreach($arras$temp){$string=$string$temp;}$signature=sha1($string);$signature=sha1($sortString);$signature=sha1($string);$signPackage=array(appId=$thisappId,nonceStr=$nonceStr,timestamp=$timestamp,card_id=$card_id,signature=$signature,rawString=$string,api_ticket=$api_ticket);return$signPackage;}privatefunctioncreateNonceStr($length=16){$chars=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789;$str=;for($i=0;$i<$length;$i++){$str=substr($chars,mt_rand(0,strlen($chars)1),1);}return$str;}*publicfunctionhttpGet($url){$curl=curl_init();curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);curl_setopt($curl,CURLOPT_TIMEOUT,500);curl_setopt($curl,CURLOPT_URL,$url);$res=curl_exec($curl);curl_close($curl);return$res;}*}$jssdk=newJSSDK(appID,appsecret);$signPackage=$jssdkGetSignPackage();echo$signPackage[signature];$res=<signPackage<card_id$signPackage[card_id]<card_id<timestamp$signPackage[timestamp]<timestamp<nonceStr$signPackage[nonceStr]<nonceStr<signature$signPackage[signature]<signature<api_ticket$signPackage[api_ticket]<api_ticket<signPackage;*functionarrayToXml($data,$wrap=xml){$str=<{$wrap};if(is_array($data)){if(hasIndex($data)){foreach($dataas$k=$v){$str=arrayToXml($v,$k);}}else{foreach($dataas$v){foreach($vas$k1=$v1)$str=arrayToXml($v1,$k1);}}}else$str=$data;$str=<{$wrap};return$str;}$res=$thisarrayToXml($signPackage);header(Contenttype:textxml);*echo$res;?前端代码:onLoad:function(options){wxlogin({success:res={varcode=rescode;consolelog(code);if(rescode){发起网络请求wxrequest({url:https:apiweixinqqcomsnsjscode2session?appid=小程序appid&secret=小程序密钥&js_code=+code+&grant_type=authorization_code,method:GET,data:{appid:小程序appid,secret:小程序密钥,code:rescode},header:{contenttype:applicationjson},以上获取的code与openid只是为了后面的,其实现在并不用到success:function(res){consolelog(res);varopenid=resdataopenid返回openidconsolelog(openid);wxrequest({url:https:wwwdgsy888888comDGKJNEWscsign3php?appid=公众号appid&secret=公众号密钥,method:POST,data:{appid:公众号appid,获取access_token时,使用的appid是公众号的而非小程序的secret:公众号密钥},header:{Contenttype:applicationjsonContentType:applicationxwwwformurlencoded},success:function(res){varstrmobile=resdata;consolelog(strmobile);varXMLParser=newParserDOMParser()后台传来的是XML格式,这里就是解析vardoc=XMLParserparseFromString(strmobile)vartimestamp=docgetElementsByTagName(timestamp)[0]; varnonceStr=docgetElementsByTagName(nonceStr)[0]; varsignature=docgetElementsByTagName(signature)[0]; varapi_ticket=docgetElementsByTagName(api_ticket)[0];strmobile=[timestampfirstChilddata,nonceStrfirstChilddata,signaturefirstChilddata,api_ticketfirstChilddata]consolelog(strmobile)添加卡卷wxaddCard({cardList:[{cardId:我们现在用的是固定cardid,这里我写死了,cardExt:{timestamp:+timestampfirstChilddata+,api_ticket:+api_ticketfirstChilddata+,nonceStr:+nonceStrfirstChilddata+,signature:+signaturefirstChilddata+}}],success:function(res){consolelog(cardList)卡券添加结果consolelog(你成功领取会员卡)},fail:function(res){consolelog(失败);},complete:function(res){consolelog(成功失败我都会执行);}})}})}})}else{consolelog(获取用户登录态失败+reserrMsg);}}})}希望大佬们出出主意帮帮我这个还没有入道的小辈,在下一鞠躬我的联系方式WX:wj2578025916邮箱:2578025916@qqcom即速小程序:支付相关问题请移步微信支付专区提问,感谢配合
更多有关「你是否也遇到小程序卡卷签名错误,求解决~」的讨论可以前往微信公开课小程序参与互动哦!
补充:你是否也遇到小程序卡卷签名错误,求解决~
展开:微信小程序卡卷签名错误无法找到原因,希望这方面的大佬能正解万分感谢~最近开发微信小程序的时候遇到卡卷签名错误的问题,因为我是前端人员,不太懂后台,在网上各种找结果还是签名错误,让我很头痛,希望小程序这方面的大佬能正解一下,在下感激不尽后台已经成功获得签名并校验(这里有个小问题就是签名校验排序问题,我在我电脑测试的时候api_ticket与timestamp没有进行交换位置所以签名校验(地址:https:mpweixinqqcomdebugcgibinsandbox?t=cardsign)不一样,但是他们电脑出现位置交换(timestamp在第一个)),我们没有自定义code没有指定openid,所以这两个参数都没有用到后台代码:<?phpdefine(appID,$_POST[appid]);define(appsecret,$_POST[secret]);classJSSDK{private$appId;private$appSecret;publicfunction__construct($appId,$appSecret){$thisappId=$appId;$thisappSecret=$appSecret;}publicfunctiongetSignPackage(){获取access_token$TOKEN_URL=https:apiweixinqqcomcgibintoken?grant_type=client_credential&appid=$thisappId&secret=$thisappSecret;$json=file_get_contents($TOKEN_URL);$result=json_decode($json,true);$ACCESS_TOKEN=$result[access_token];echo$ACCESS_TOKEN<br<br;jsapiTicket$TOKEN_URL=https:apiweixinqqcomcgibinticketgetticket?access_token=$ACCESS_TOKEN&type=wx_card;$json=file_get_contents($TOKEN_URL);$result=json_decode($json,true);$api_ticket=$result[ticket];echo$jsapi_ticket<br<br;$jsapi_ticket=$thisgetJsApiTicket();$url=http:$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI];$card_id=$_POST[card_id];$timestamp=time();$nonceStr=$thiscreateNonceStr();$string=api_ticket=$api_ticket×tamp=$timestamp&nonce_str=$nonceStr&card_id=$card_id;$string=$timestamp$nonceStr$api_ticket$card_id;echo<br<br;$arr=array($card_id,$api_ticket,$nonceStr,$timestamp);asort($arr,SORT_STRING);$string=;foreach($arras$temp){$string=$string$temp;}$signature=sha1($string);$signature=sha1($sortString);$signature=sha1($string);$signPackage=array(appId=$thisappId,nonceStr=$nonceStr,timestamp=$timestamp,card_id=$card_id,signature=$signature,rawString=$string,api_ticket=$api_ticket);return$signPackage;}privatefunctioncreateNonceStr($length=16){$chars=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789;$str=;for($i=0;$i<$length;$i++){$str=substr($chars,mt_rand(0,strlen($chars)1),1);}return$str;}*publicfunctionhttpGet($url){$curl=curl_init();curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);curl_setopt($curl,CURLOPT_TIMEOUT,500);curl_setopt($curl,CURLOPT_URL,$url);$res=curl_exec($curl);curl_close($curl);return$res;}*}$jssdk=newJSSDK(appID,appsecret);$signPackage=$jssdkGetSignPackage();echo$signPackage[signature];$res=<signPackage<card_id$signPackage[card_id]<card_id<timestamp$signPackage[timestamp]<timestamp<nonceStr$signPackage[nonceStr]<nonceStr<signature$signPackage[signature]<signature<api_ticket$signPackage[api_ticket]<api_ticket<signPackage;*functionarrayToXml($data,$wrap=xml){$str=<{$wrap};if(is_array($data)){if(hasIndex($data)){foreach($dataas$k=$v){$str=arrayToXml($v,$k);}}else{foreach($dataas$v){foreach($vas$k1=$v1)$str=arrayToXml($v1,$k1);}}}else$str=$data;$str=<{$wrap};return$str;}$res=$thisarrayToXml($signPackage);header(Contenttype:textxml);*echo$res;?前端代码:onLoad:function(options){wxlogin({success:res={varcode=rescode;consolelog(code);if(rescode){发起网络请求wxrequest({url:https:apiweixinqqcomsnsjscode2session?appid=小程序appid&secret=小程序密钥&js_code=+code+&grant_type=authorization_code,method:GET,data:{appid:小程序appid,secret:小程序密钥,code:rescode},header:{contenttype:applicationjson},以上获取的code与openid只是为了后面的,其实现在并不用到success:function(res){consolelog(res);varopenid=resdataopenid返回openidconsolelog(openid);wxrequest({url:https:wwwdgsy888888comDGKJNEWscsign3php?appid=公众号appid&secret=公众号密钥,method:POST,data:{appid:公众号appid,获取access_token时,使用的appid是公众号的而非小程序的secret:公众号密钥},header:{Contenttype:applicationjsonContentType:applicationxwwwformurlencoded},success:function(res){varstrmobile=resdata;consolelog(strmobile);varXMLParser=newParserDOMParser()后台传来的是XML格式,这里就是解析vardoc=XMLParserparseFromString(strmobile)vartimestamp=docgetElementsByTagName(timestamp)[0]; varnonceStr=docgetElementsByTagName(nonceStr)[0]; varsignature=docgetElementsByTagName(signature)[0]; varapi_ticket=docgetElementsByTagName(api_ticket)[0];strmobile=[timestampfirstChilddata,nonceStrfirstChilddata,signaturefirstChilddata,api_ticketfirstChilddata]consolelog(strmobile)添加卡卷wxaddCard({cardList:[{cardId:我们现在用的是固定cardid,这里我写死了,cardExt:{timestamp:+timestampfirstChilddata+,api_ticket:+api_ticketfirstChilddata+,nonceStr:+nonceStrfirstChilddata+,signature:+signaturefirstChilddata+}}],success:function(res){consolelog(cardList)卡券添加结果consolelog(你成功领取会员卡)},fail:function(res){consolelog(失败);},complete:function(res){consolelog(成功失败我都会执行);}})}})}})}else{consolelog(获取用户登录态失败+reserrMsg);}}})}希望大佬们出出主意帮帮我这个还没有入道的小辈,在下一鞠躬我的联系方式WX:wj2578025916邮箱:2578025916@qqcom即速小程序:支付相关问题请移步微信支付专区提问,感谢配合
更多有关「你是否也遇到小程序卡卷签名错误,求解决~」的讨论可以前往微信公开课小程序参与互动哦!
标签:微信公开课,小程序
「你是否也遇到小程序卡卷签名错误,求解决~」热门讨论订阅
方法1:微信扫描微信公开课小程序码即可订阅热门讨论「你是否也遇到小程序卡卷签名错误,求解决~」
方法2:微信搜索微信公开课小程序名称进入,即可订阅热门讨论「你是否也遇到小程序卡卷签名错误,求解决~」
方法3:微信网页访问即速商店,长按识别微信公开课小程序码即可订阅热门讨论「你是否也遇到小程序卡卷签名错误,求解决~」
微信公开课小程序热门讨论「你是否也遇到小程序卡卷签名错误,求解决~」由微信公开课原创摘录于微信小程序商店shop.jisuapp.cn,转载请注明出处。
微信公开课热门讨论「你是否也遇到小程序卡卷签名错误,求解决~」由微信公开课开发者向微信用户提供,并对本服务内容、数据资料及其运营行为等真实性、合法性及有效性承担全部责任。
微信公开课小程序
更新时间:2019-03-15 18:14:57
>
__methodCallerx27;ofundefined
>-404011cloudfunctionexecutionerror
>,请补充选择商家自营-预付卡销售-发行方类目,并在基础信息处申请该类目,通过
>:host在模拟器中显示无效
>:请在小程序服务页面上架正式(非测试)内容或商品后重新提交审核
>.net 微信小程序 上传图片
>'setTimeout'的问题
>‘三朵里熙SPA主题减压空间’为什么搜索关键词‘三朵里‘搜不到
>‘扫普通链接二维码打开小程序‘中设置为体验版,扫码打开是线上版本
>“cloudfunctions**indexjs”gitignore
>“NO ULINK DEVICE FOUND”是怎么回事
>“万马掌上校园”的类目审核
>“上线了”公司开发的微信小程序怎么样?
>“产品是否一定需要条形码”
>