分享电商相关(支付、客服)接口及调用文档
微信相关
微信公众号支付
公众号支付是在微信端内通过微信授权后支付。
调用:
WeixinJSBridge.invoke('getBrandWCPayRequest', {"appId":"wx2421b1c4370ec43b", //公众号名称,由商户传入 "timeStamp":"1395712654", //时间戳,自1970年以来的秒数 "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串 "package":"prepay_id=u802345jgfjsdfgsdg888", "signType":"MD5", //微信签名方式: "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 },function(res){if(res.err_msg == "get_brand_wcpay_request:ok") { alert("微信支付成功!"); } else if(res.err_msg == "get_brand_wcpay_request:cancel") { alert("用户取消支付!"); } else { alert("支付失败!"); } } );
微信H5支付
微信H5支付是H5页面分享出去后在其他应用内呼出微信进行支付
调用:
引入JS库
http://res.wx.qq.com/open/js/jweixin-1.2.0.js
权限验证
wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: '', // 必填,企业号的唯一标识,此处填写企业号corpid timestamp: , // 必填,生成签名的时间戳 nonceStr: '', // 必填,生成签名的随机串 signature: '',// 必填,签名,见附录1 jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2});
验证权限
wx.ready(function(){ // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。});
后台传参
wx.chooseWXPay({ appId: 'wx23841cce7185b550', timestamp: '1461300911', // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符 nonceStr: '5719aeafb587f', // 支付签名随机串,不长于 32 位 package: 'prepay_id=wx20160422125512b7d2205c9c0913643939', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***) signType: 'MD5', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5' paySign: '5DAB1DDABE1AD34E8FF3386AE971B727', // 支付签名 success: function(res) { // 支付成功后的回调函数 if (res.errMsg == "chooseWXPay:ok") { //支付成功 alert('支付成功'); } else { alert(res.errMsg); } }, cancel: function(res) { //支付取消 alert('支付取消'); } });
客服相关
智齿客服普通接口
https://www.sobot.com/chat/h5/index.html?sysNum=智齿客服后台生成的KEY
智齿客服自定义发送商品调用
Js引入:
<script class="zhiCustomBtn" id="zhichiScript" src="//www.sobot.com/chat/frame/js/entrance.js?sysNum=708abdcdd7574f9eb6bde7761095c1e0" charset="utf-8"></script>
Html绑定:
<button class="zhiCustomBtn"></button>
Js调用:
//调用智齿客服var zhiManager = (getzhiSDKInstance());zhiManager.set('anchor', 'true');zhiManager.set("color", '2CB85A');zhiManager.set('title', '土豆街商品咨询');//设置用户信息zhiManager.set('userinfo', { tel: '', //电话或手机 email: '', //邮箱uname: '', //昵称 visitTitle: '', //对话页标题,若不传入系统将获取用户打开咨询组件时所在页面的标题 visitUrl: '', //对话页URL,若不传入系统将获取用户打开咨询组件时所在页面的URL face: '', //头像URL realname: '', //真实姓名 weibo: '', //微博账号 weixin: '', //微信账号 qq: '', //QQ号 sex: '', //0 男 1 女 birthday: '', //生日,如“1990-01-01” remark: '', //用户的备注信息 params: '{"等级":"VIP用户","客户状态":"意向客户"}' //自定义用户信息字段});//通过参数设置H5聊天页面显示商品信息内容zhiManager.set("title_info", "智齿_商品详情页_小智智能"); //必传 需编码zhiManager.set("url_info", "http://www.sobot.com/order/zc.html"); //必传 需编码zhiManager.set("abstract_info", "更精确的理解,更精确地回答,在闲聊寒暄中,拉近与客户的距离,导入知识库,意想不到的方便快捷,最简单的知识添加,事半功倍。"); //需编码zhiManager.set("label_info", "2000"); //需编码zhiManager.set("thumbnail_info", "http://test.sobot.com/console/images/logo_new.png"); //需编码//自定义按钮后可设置该值改变悬浮窗的水平位置zhiManager.set("customMargin", 200);//手动初始化时 通过 load 方法调用 js 组件zhiManager.on("load", function(ret) { zhiManager.initBtnDOM();});
融云客服接口
第1步
<!-- 作者:1979788761@qq.com 时间:2019-01-30 描述:引入融云Web SDK,SDK 文档:http://www.rongcloud.cn/docs/web.html#sdk--><script src="//cdn.ronghub.com/RongIMLib-2.3.5.min.js"></script>
第2步
var conf_appkey = 'c9kqb3rdc4mej';var conf_token = 'mdpCSlMhhapK4WtejKRn/+BqCoraaxP5usXU1I/M+sgwU0qdnXp/F00eCUinhFNYJtrgt1mHLDBYm6c7rEI9NI5OjwOclpjV';//1,初始化融云RongIMLib.RongIMClient.init(conf_appkey);//2,获取tokenvar token = conf_token;//3,连接状态监听器RongIMClient.setConnectionStatusListener({ onChanged: function(status) { switch(status) {case RongIMLib.ConnectionStatus.CONNECTED: console.log('链接成功');break;case RongIMLib.ConnectionStatus.CONNECTING: console.log('正在链接');break;case RongIMLib.ConnectionStatus.DISCONNECTED: console.log('断开连接');break;case RongIMLib.ConnectionStatus.KICKED_OFFLINE_BY_OTHER_CLIENT: console.log('其他设备登录');break;case RongIMLib.ConnectionStatus.DOMAIN_INCORRECT: console.log('域名不正确');break;case RongIMLib.ConnectionStatus.NETWORK_UNAVAILABLE: console.log('网络不可用');break; } }});//4,消息监听器RongIMClient.setOnReceiveMessageListener({ // 接收到的消息 onReceived: function(message) { // 判断消息类型 switch(message.messageType) {case RongIMClient.MessageType.TextMessage: // message.content.content => 消息内容break;case RongIMClient.MessageType.VoiceMessage: // 对声音进行预加载 // message.content.content 格式为 AMR 格式的 base64 码break;case RongIMClient.MessageType.ImageMessage: // message.content.content => 图片缩略图 base64。 // message.content.imageUri => 原图 URL。break;case RongIMClient.MessageType.DiscussionNotificationMessage: // message.content.extension => 讨论组中的人员。break;case RongIMClient.MessageType.LocationMessage: // message.content.latiude => 纬度。 // message.content.longitude => 经度。 // message.content.content => 位置图片 base64。break;case RongIMClient.MessageType.RichContentMessage: // message.content.content => 文本消息内容。 // message.content.imageUri => 图片 base64。 // message.content.url => 原图 URL。break;case RongIMClient.MessageType.InformationNotificationMessage: // do something...break;case RongIMClient.MessageType.ContactNotificationMessage: // do something...break;case RongIMClient.MessageType.ProfileNotificationMessage: // do something...break;case RongIMClient.MessageType.CommandNotificationMessage: // do something...break;case RongIMClient.MessageType.CommandMessage: // do something...break;case RongIMClient.MessageType.UnknownMessage: // do something...break; default: // do something... } }});//5,连接服务器RongIMClient.connect(token, { onSuccess: function(userId) { console.log("Connect successfully." + userId); //显示会话 }, onTokenIncorrect: function() { console.log('token无效'); }, onError: function(errorCode) { var info = ''; switch(errorCode) {case RongIMLib.ErrorCode.TIMEOUT: info = '超时';break;case RongIMLib.ConnectionState.UNACCEPTABLE_PAROTOCOL_VERSION: info = '不可接受的协议版本';break;case RongIMLib.ConnectionState.IDENTIFIER_REJECTED: info = 'appkey不正确';break;case RongIMLib.ConnectionState.SERVER_UNAVAILABLE: info = '服务器不可用';break; } console.log(errorCode); }});//6,重新连接服务器var callback = { onSuccess: function(userId) { console.log("Reconnect successfully." + userId); //显示会话 }, onTokenIncorrect: function() { console.log('token无效'); }, onError: function(errorCode) { console.log(errorcode); }};var config = { // 默认 false, true 启用自动重连,启用则为必选参数 auto: true, // 网络嗅探地址 [http(s)://]cdn.ronghub.com/RongIMLib-2.2.6.min.js 可选 url: 'cdn.ronghub.com/RongIMLib-2.2.6.min.js', // 重试频率 [100, 1000, 3000, 6000, 10000, 18000] 单位为毫秒,可选 rate: [100, 1000, 3000, 6000, 10000]};RongIMClient.reconnect(callback, config);
第3步,消息中心,获取会话列表方法,直接操作list
RongIMClient.getInstance().getConversationList({ onSuccess: function(list) { // list => 会话列表集合。 console.log('会话列表数据:' + JSON.stringify(list)); }, onError: function(error) { console.log('会话列表错误:' + error); }}, null);
第4步,清除未读消息数
//清除未读消息数var conversationType = RongIMLib.ConversationType.PRIVATE;var targetId = '接收消息的id';RongIMClient.getInstance().clearUnreadCount(conversationType, targetId, { onSuccess: function() { // 清除未读消息成功。 console.log('清除未读消息成功'); }, onError: function(error) { // error => 清除未读消息数错误码。 console.log('清除未读消息失败:' + error); }});
客服消息接口
state_cache => 缓存状态
data_cacheArray=>消息缓存数组
state_history=>是否有历史消息状态
data_emojiList=>表情数组
var app = { state_cache: [], data_cacheArray: [], state_history:false, data_emojiList:[], loadMessage: function() { //首次加载获取消息列表 var conversationType = RongIMLib.ConversationType.PRIVATE; //单聊,其他会话选择相应的消息类型即可。 var targetId = app.data_targetid; // 想获取自己和谁的历史消息,targetId 赋值为对方的 Id。 var timestrap = null; // 默认传 null,若从头开始获取历史消息,请赋值为 0 ,timestrap = 0; var count = 20; // 每次获取的历史消息条数,范围 0-20 条,可以多次获取。 RongIMLib.RongIMClient.getInstance().getHistoryMessages(conversationType, targetId, timestrap, count, { onSuccess: function(list, hasMsg) { // list => Message 数组。 // hasMsg => 是否还有历史消息可以获取。 console.log('load-获取消息数据:' + JSON.stringify(list)); console.log('load-是否还有历史消息可以获取:' + hasMsg);if(app.state_cache[app.data_targetid] != '1') { app.data_cacheArray[app.data_targetid] = list; app.state_cache[app.data_targetid] = '1'; } app.data_messageList = app.jsonSort(app.data_cacheArray[app.data_targetid], 'sentTime'); app.state_history = hasMsg; }, onError: function(error) { console.log('load-获取消息数据失败:' + error); } }); }, getMessage: function(input) { //当有用户发消息过来,获取消息 console.log('get-获取消息数据:' + JSON.stringify(input)); app.data_cacheArray[app.data_targetid].push(input); app.data_messageList = app.jsonSort(app.data_cacheArray[app.data_targetid], 'sentTime'); app.clearUnreadCount(); }, updateMessage: function(input) { //当给用户发消息更新消息列表 console.log('update-更新消息数据:' + JSON.stringify(input)); app.data_cacheArray[app.data_targetid].push(input); app.data_messageList = app.jsonSort(app.data_cacheArray[app.data_targetid], 'sentTime'); }, getHistoryMessage: function() { //获取历史消息列表 var conversationType = RongIMLib.ConversationType.PRIVATE; //单聊,其他会话选择相应的消息类型即可。 var targetId = app.data_targetid; // 想获取自己和谁的历史消息,targetId 赋值为对方的 Id。 var timestrap = null; // 默认传 null,若从头开始获取历史消息,请赋值为 0 ,timestrap = 0; var count = 20; // 每次获取的历史消息条数,范围 0-20 条,可以多次获取。 RongIMLib.RongIMClient.getInstance().getHistoryMessages(conversationType, targetId, timestrap, count, { onSuccess: function(list, hasMsg) { // list => Message 数组。 // hasMsg => 是否还有历史消息可以获取。 console.log('history-获取消息数据:' + JSON.stringify(list)); console.log('history-是否还有历史消息可以获取:' + hasMsg); app.data_cacheArray[app.data_targetid] = app.data_cacheArray[app.data_targetid].concat(list); app.data_messageList = app.jsonSort(app.data_cacheArray[app.data_targetid], 'sentTime'); app.state_history = hasMsg; }, onError: function(error) { console.log('history-获取消息数据失败:' + error); } }); }, jsonSort: function(array, field, reverse) { //对消息列表进行实践倒序排序,数组长度小于2 或 没有指定排序字段或不是json格式数据if(array.length < 2 || !field || typeof array[0] !== "object") return array; //数字类型排序if(typeof array[0][field] === "number") { array.sort(function(x, y) {return x[field] - y[field] }); } //字符串类型排序if(typeof array[0][field] === "string") { array.sort(function(x, y) {return x[field].localeCompare(y[field]) }); } //倒序if(reverse) { array.reverse(); }return array; }, sendMessageText: function(message) { //发送文本消息 var msg = new RongIMLib.TextMessage({ //表情转文本 content: app.emojiToText(message), extra: "附加信息" }); // 单聊,其他会话选择相应的消息类型即可。 var conversationtype = RongIMLib.ConversationType.PRIVATE; // 目标 Id var targetId = app.data_targetid; RongIMClient.getInstance().sendMessage(conversationtype, targetId, msg, { onSuccess: function(message) { //message 为发送的消息对象并且包含服务器返回的消息唯一Id和发送消息时间戳 console.log("发送文本消息成功:" + JSON.stringify(message)); //更新会话列表 app.getUserList(); //更新消息列表 app.updateMessage(message); }, onError: function(errorCode, message) { var info = ''; switch(errorCode) {case RongIMLib.ErrorCode.TIMEOUT: info = '超时';break;case RongIMLib.ErrorCode.UNKNOWN: info = '未知错误';break;case RongIMLib.ErrorCode.REJECTED_BY_BLACKLIST: info = '在黑名单中,无法向对方发送消息';break;case RongIMLib.ErrorCode.NOT_IN_DISCUSSION: info = '不在讨论组中';break;case RongIMLib.ErrorCode.NOT_IN_GROUP: info = '不在群组中';break;case RongIMLib.ErrorCode.NOT_IN_CHATROOM: info = '不在聊天室中';break; default: info = x;break; } console.log('发送失败:' + info); } }); }}
表情接口
1,初始化表情接口
<!-- 作者:1979788761@qq.com 时间:2019-01-30 描述:引入Emoji表情插件--><script src="//cdn.ronghub.com/RongEmoji-2.2.6.min.js"></script>//初始化表情RongIMLib.RongIMEmoji.init();
2,实现表情接口各类操作方法
textToEmoji: function(message) { //文本转emoji表情return RongIMLib.RongIMEmoji.symbolToEmoji(message);},emojiToText: function(message) { //emoji表情转文本return RongIMLib.RongIMEmoji.emojiToSymbol(message);},getEmoji: function() { //获取Emoji表情列表 app.data_emojiList = RongIMLib.RongIMEmoji.list; console.log('获取Emoji表情列表');},clickEmoji: function(emojiSymbol) { //点击表情输入文本框 console.log('选择了Emoji表情列表:' + emojiSymbol); app.text_message += emojiSymbol; app.state_emoji = false;},showEmoji: function(state) {if(app.data_targetid != '') { //显示或隐藏emoji表情面板 console.log('显示或隐藏emoji表情面板:' + state); app.state_emoji = state; }},
夜雨聆风