appid=〃-1〃/>(appid是什么?)
微信支付参数详情
// 微信支付参数

/**

* 微信APP支付

* @param body 商品描述
* @param out_trade_no 订单号
* @param total_fee 金额(分)
* @param objectStr 附加字段
* @param loca_ip 用户实际ip地址
* @return
* @throws Exception
*/
public static ReturnData wxAppPay(String body, Stringout_trade_no, Integertotal_fee, String objectStr, Stringloca_ip)throws Exception{
ReturnData result =new ReturnData();
String nonce_str =getRandomString(32);// 随机字符串
// 封装参数
SortedMapString, String signParams =new TreeMapString, String();
signParams.put("appid", WechatConfig.appid);// 微信开放平台审核通过的应用APPID
signParams.put("mch_id", WechatConfig.mch_id);// 微信支付分配的商户号
signParams.put("nonce_str", nonce_str);// 随机字符串,不长于32位
signParams.put("body", body);// 商品描述
signParams.put("attach", objectStr);// 附加数据,在查询API和支付通知中原样返回
signParams.put("out_trade_no", out_trade_no);// 商户系统内部订单号
signParams.put("total_fee", String.valueOf(total_fee));// 订单总金额,单位为分
signParams.put("spbill_create_ip", loca_ip);// 用户端实际ip
signParams.put("notify_url", WechatConfig.notify_url);// 接收微信支付异步通知回调地址
signParams.put("trade_type","APP");// 支付类型
logger.info("微信支付:"+ JSONObject.toJSONString(signParams));
String sign = WeinPayUtil.createSign("UTF-8", signParams ,WechatConfig.key);// 生成签名
signParams.put("sign", sign);// 签名
String requestXml = WeinPayUtil.getRequestXml(signParams);// 生成Xml格式的字符串
// 调用统一支付接口
// requestXml = new String(requestXml.getBytes("utf-8"), "ISO-8859-1"); //乱码时使用
String resXml = HttpUtil.post("", requestXml);
//支付返回
// 返回的result成功结果取出prepay_id:
Map map = XMLUtil.doXMLParse(resXml);
Stringreturn_code=(String) map.get("return_code");
if (return_code.contains("SUCCESS")) {
String prepay_id =(String) map.get("prepay_id");// 获取到prepay_id (预支付ID)
String timestamp = String.valueOf(System.currentTimeMillis() /1000);
SortedMapString, String signParam =new TreeMapString, String();
signParam.put("appid", WechatConfig.appid);// app_id
signParam.put("partnerid", WechatConfig.mch_id);// 微信商户账号
signParam.put("prepayid", prepay_id);// 预付订单id
signParam.put("package","Sign=WXPay");// 默认sign=WXPay
signParam.put("noncestr", nonce_str);// 自定义不重复的长度不长于32位
signParam.put("timestamp", timestamp);// 北京时间时间戳
String signAgain = WeinPayUtil.createSign("UTF-8", signParam, WechatConfig.key);// 再次生成签名
signParam.put("sign", signAgain);
JSONObject returnParam = JSONObject.parseObject(JSONObject.toJSONString(signParam));
logger.info("微信APP支付返回:"+returnParam.toString());
result.setCode(200);
result.setData(returnParam.toString());
} else {
result.setMsg((String) map.get("return_msg"));
result.setCode(2);
result.setData(false);
}
return result;
}
(appid是什么?)">
怎样开发个微信服务号应用
注册应用,这个就不解释了,企业用户才可以使用服务号了,但是菜单什么的订阅号还是可以使用的。
平台地址:
开发文档:
开启开发模式后,设置服务器URL(用来部署自己的应用),Token(用于数据校验)
初次设置有个校验
public static bool Check(string signature, string timestamp, string nonce, string token = null)
{
Logger.Info(string.Format("{0}=?{1}", signature, GetSignature(timestamp, nonce, token)));
return signature == GetSignature(timestamp, nonce, token);
}
public static string GetSignature(string timestamp, string nonce, string token = null)
{
token = token ?? Config.Token;
var arr = new Liststring { token, timestamp, nonce };
arr.Sort();
var result = arr.Aggregate("", (current, s) = current + s);
var sha1 = new SHA1CryptoServiceProvider();
return BitConverter.ToString(sha1.ComputeHash(Encoding.Default.GetBytes(result))).Replace("-", "").ToLower();
}
应用注册成功后,微信也给了我们 AppId 和 AppSecret
定义菜单,目前自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。请注意,创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来。
文档地址:
目前自定义菜单接口可实现两种类型按钮,
click: 用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;
view: 用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值(即网页链接),达到打开网页的目的,建议与网页授权获取用户基本信息接口结合,获得用户的登入个人信息。
这里用到access_token
public static string GetAccessToken()
{
var key = Cache.Get("access_token")?? InitAccessToken();
return key+"";
}
public static string InitAccessToken()
{
var url = string.Format(Config.UrlForGetAccessToken, Config.AppId, Config.AppSecret);
var result = new ReadUrlParser(url).HttpContent;
Logger.Info(result);
var key = "";
var jss= new JavaScriptSerializer();
if(result.Contains("access_token"))
{
var rep = jss.DeserializeEntities.AccessToken(result);
key = rep.access_token;
Cache.Set("access_token",key,rep.expires_in);
}else
{
var rep = jss.DeserializeEntities.ErrorMsg(result);
Logger.Error(rep.errcode+rep.errmsg);
key ="";
}
return key;
}
菜单定义后用json格式Post到它的API接口就可以了。
MenuItem
[DataContract]
public class MenuItem
{
[DataMember(Name = "key")]
public string key { get; set; }
[DataMember(Name = "url")]
public string url { get; set; }
[DataMember(Name = "type")]
public string type { get; set; }
[DataMember(Name = "name")]
public string name { get; set; }
}
Button
[Serializable]
[DataContract]
public class Button:MenuItem
{
[DataMember(Name = "sub_button")]
public ListButton sub_button { get; set; }
}
Menu
[DataContract]
public class Menu
{
[DataMember(Name = "button")]
public ListButton button { get; set; }
}
CreateMenu
public ActionResult CreateMenu()
{
var jss = new JavaScriptSerializer();
var menu=jss.Serialize(Util.Config.AppMenu);
menu = menu.Replace("\"sub_button\":null,", "");
menu = menu.Replace("\"url\":null,", "");
menu = menu.Replace("\"key\":null,", "");
var url = string.Format(Util.Config.UrlForCreateMenu, Util.Client.GetAccessToken());
var result = new Util.ClientRequest().SendHttpRequestPost(url, menu);
return Content(result);
}
消息的接收
[ActionName("Index")]
public ActionResult Post(string signature, string timestamp, string nonce, string echostr)
{
Logger.Info("START POST PARSE.");
if (!Util.Client.Check(signature, timestamp, nonce))
{
Logger.Error("参数错误");
return Content("参数错误");
}
var doc = XDocument.Load(Request.InputStream);
var requestMessage = RequestMessageFactory.GetRequestEntity(doc);
处理接收到的requestMessage ,每次都要验证信息的真实性,也就和第一步验证是一回事,
消息有几种:文本、图片、语音、视频、位置、链接
消息的发送
var strongresponseMessage = ResponseMessageBase.CreateFromRequestMessage(requestMessage, ResponseMsgType.Text) as ResponseMessageText;
strongresponseMessage.Content =(guest!=null?guest.nickname:"您")+ string.Format("刚才发送了文字信息:{0}", strongRequestMessage.Content);
responseMessage = strongresponseMessage;
var responseDoc =Helper.EntityHelper.ConvertEntityToXml(responseMessage);
return Content(responseDoc.ToString());
用xml 响应就可以了,也是文本、图片、语音、视频、音乐、图文
4
事件的接收,和消息接收是一样的,不过MsgType=event 包括关注、取消关注、上报地址、地定义菜单(click类型)的点击,响应也和消息的响应一样。
5
其余功能还没怎么使用,现在建商城还是使用手机站的页面,可以把用户信息推送到手机站
百度地图签名报错问题求助完成百度地图签名,运行我的app,获得报错:
01-02 17:39:26.261 11673-11673/com.hu7 E/baidumapsdk﹕ Authentication Error errorcode: -1 uid: -1 appid -1 msg: Exception:com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate: current time: Sun Jan 02 17:39:26 格林尼治标准时间+0800 2000, validation time: Wed Nov 08 08:00:00 格林尼治标准时间+0800 2006
签名生成步骤:
1.获取debug.keystore的sha1串
glone@7hu ~$keytool -list -v -keystore ~/.android/debug.keystore
输入密钥库口令:
密钥库类型: JKS
密钥库提供方: SUN
您的密钥库包含 1 个条目
别名: androiddebugkey
创建日期: 2013-11-5
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=Android Debug, O=Android, C=US
发布者: CN=Android Debug, O=Android, C=US
序列号: 52790da3
有效期开始日期: Tue Nov 05 23:24:19 CST 2013, 截止日期: Wed Nov 05 23:24:19 CST 2014
证书指纹:
MD5: 45:AC:93:20:04:DE:E6:2F:7F:C9:DE:8F:BC:98:DA:79
SHA1: 63:DA:04:51:18:9F:5D:2A:1F:B4:53:2B:B9:73:1F:F1:7E:81:**:**
SHA256: FB:A9:81:4B:EF:EA:A9:A9:EE:84:B8:B3:70:CA:27:D7:F0:51:98:72:A9:37:BE:A8:46:4A:B2:88:B0:E7:F0:E4
签名算法名称: SHA1withRSA
版本: 3
输入到api控制台申请 for mobile key,获取到签名 HuQk3qvYigssTWCiMH*****
填入到 meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="HuQk3qvYigssTWCiMHbg****"/
在调用接口的过程中(PC上开发,调试机器用手机,或者模拟器),能用Location定位到位置信息,但是使用
com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/无法看到地图,显示的是空白。
有没有那种可以给自已的微信发消息的 API一、JS API支付接口(getBrandWCPayRequest)微信JS API只能在微信内置浏览器中使用,其他浏览器调用无效。微信提供getBrandWCPayRequest接口供商户前端网页调用,调用之前微信会鉴定商户支付权限,若商户具有调起支付的权限,则将开始支付流程。这里主要介绍支付前的接口调用规则,支付状态消息通知机制请参加下文。接口需要注意:所有传入参数都是字符串类型!getBrandWCPayRequest参数如下图所示。参数 名称 必填 格式 说明 appId 公众号id 是 字符串类型 商户注册具有支付权限的公众号成功后即可获得; timeStamp 时间戳 是 字符串类型,32个字节以下 商户生成,从1970年1月1日00:00:00至今的秒数,即当前的时间,且最终需要转换为字符串形式; nonceStr 随机字符串 是 字符串类型,32个字节以下 商户生成的随机字符串; package 订单详情扩展字符串 是 字符串类型,4096个字节以下 商户将订单信息组成该字符串,具体组成方案参见接口使用说明中package组包帮劣;由商户按照规范拼接后传入; signType 签名方式 是 字符串类型,参数取值"SHA1" 按照文档中所示填入,目前仅支持SHA1; paySign 签名 是 字符串类型 商户将接口列表中的参数按照指定方式迚行签名,签名方式使用signType中标示的签名方式,具体签名方案参见接口使用说明中签名帮劣;由商户按照规范签名后传入; getBrandWCPayRequest返回值如下表所示。返回值 说明 err_msg get_brand_wcpay_request:ok 支付成功get_brand_wcpay_request:cancel 支付过程中用户取消get_brand_wcpay_request:fail 支付失败 JS API的返回结果 get_brand_wcpay_request:ok 仅在用户成功完成支付时返回。由于前端交互复杂,get_brand_wcpay_request:cancel 或者 get_brand_wcpay_request:fail 可以统一处理为用户遇到错误或者主动放弃,不必细化区分。二、JS API支付实现下面代码是微信官方提供的JS API支付demo?php include_once("WxPayHelper.php"); $commonUtil = new CommonUtil(); $wxPayHelper = new WxPayHelper(); $wxPayHelper-setParameter("bank_type", "WX"); $wxPayHelper-setParameter("body", "test"); $wxPayHelper-setParameter("partner", "1900000109"); $wxPayHelper-setParameter("out_trade_no", $commonUtil-create_noncestr()); $wxPayHelper-setParameter("total_fee", "1"); $wxPayHelper-setParameter("fee_type", "1"); $wxPayHelper-setParameter("notify_url", "htttp://"); $wxPayHelper-setParameter("spbill_create_ip", "127.0.0.1"); $wxPayHelper-setParameter("input_charset", "GBK"); ? html script language="javascript" function callpay() { WeinJSBridge.invoke('getBrandWCPayRequest',?php echo $wxPayHelper-create_biz_package(); ?,function(res){ WeinJSBridge.log(res.err_msg); alert(res.err_code+res.err_desc+res.err_msg); }); } /script body button type="button" onclick="callpay()"wx pay test/button /body /html 将其中的微信支付参数修改成自己所申请得到的,然后将网页上传到微信支付目录下,给测试账号回复该网页地址。用户就可以实现一次JS API支付。三、效果演示下面是官方DEMO修改后,发起支付的页面图。确认交易:输入支付密码:交易成功:以上就是对微信支付JS API 资料的整理,希望能帮到大家,谢谢支持!
分享网页到微信朋友圈,怎样才能带缩略图微信公众平台有公布接口,毕竟是TX的产品,还是使用官方接口吧
官方的链接微信分享网页的缩略图、链接、标题和摘要
未注册的可能看不到,直接上代码,粗体的是修改
script
var imgUrl = 'your imgUrl';
var lineLink = 'your link';
var descContent = "万达狂欢节, 夺宝幸运星大抽奖活动开始啦!";
var shareTitle = '万达狂欢节';
var appid = ' ';//填入你的appid
function shareFriend() {
WeinJSBridge.invoke('sendAppMessage',{
"appid": appid,
"img_url": imgUrl,
"img_width": "640",
"img_height": "640",
"link": lineLink,
"desc": descContent,
"title": shareTitle
}, function(res) {
_report('send_msg', res.err_msg);
})
}
function shareTimeline() {
WeinJSBridge.invoke('shareTimeline',{
"img_url": imgUrl,
"img_width": "640",
"img_height": "640",
"link": lineLink,
"desc": descContent,
"title": shareTitle
}, function(res) {
_report('timeline', res.err_msg);
});
}
function shareWeibo() {
WeinJSBridge.invoke('shareWeibo',{
"content": descContent,
"url": lineLink,
}, function(res) {
_report('weibo', res.err_msg);
});
}
// 当微信内置浏览器完成内部初始化后会触发WeinJSBridgeReady事件。
document.addEventListener('WeinJSBridgeReady', function onBridgeReady() {
// 发送给好友
WeinJSBridge.on('menu:share:appmessage', function(argv){
shareFriend();
});
// 分享到朋友圈
WeinJSBridge.on('menu:share:timeline', function(argv){
shareTimeline();
});
// 分享到微博
WeinJSBridge.on('menu:share:weibo', function(argv){
shareWeibo();
});
}, false);
/script
C语言报错,哪儿错了大佬指点一下在C语言中,如果 standalone 是一个字符串,要判断㝊是否等于 yes (区分大小写)的话,应该是要先包含头文件string.h,然后用函数表达式
strcmp(standalone,"yes")==0
来表示的。
单引号是用来表示单个字符的,不能用来表示字符串。
以上就是关于appid=〃-1〃/>(appid是什么?)的介绍,更多问题请留言或者咨询老师呢
文档于 2025-12-28 07:55:27 修改

mip.xncswj.com