C# 微信共享收货地址 V1.6
//使用微信共享收货地址在跳转到当前页面的路径上必须要包含Code和state这两个获取用户信息的参数
//例如 <a href="ProductOrder.aspx?OID=<%=dr["ID"].ToString() %>&SID=<%=SID %>&code=<%=code%>&state=1&showwxpaytitle=1" //class="right" >安全支付</a>
<script type="text/javascript">
//前台微信共享收货地址
function editAddress() {
var URL = window.location.href; //当前页面的路径
$.ajax({
type: "POST",
url: "/***/handler/OrderWaitHandler.ashx",
data: "otype=Address&path=" + URL,
async: false,
success: function (msg) {
if (msg == "-99") {
ShowFW_Guanzhu("请先关注该公众号,再进行下单操作!");
} else if (msg == "-98") {
ShowFW("出现未知的错误,请联系管理员!");
} else {
var argument = msg.split(",");
WeixinJSBridge.invoke('editAddress', {
"appId": argument[0], //公众号AppID
"scope": "jsapi_address", //获得权限
"signType": "sha1", //加密方法
"addrSign": argument[1], //签名
"timeStamp": argument[2], //时间戳
"nonceStr": argument[3] //随机字符串
}, function (res) {
if (res.err_msg == "edit_address:ok") {
//收货信息赋值
document.getElementById("UserName").value = res.userName;
document.getElementById("telNumber").value = res.telNumber;
document.getElementById("firstName").value = res.proviceFirstStageName;
document.getElementById("secondName").value = res.addressCitySecondStageName;
document.getElementById("thirdName").value = res.addressCountiesThirdStageName;
document.getElementById("detalInfo").value = res.addressDetailInfo;
}
});
}
}
});
}
</script>
/// <summary>
/// 共享收货地址
/// </summary>
/// <param name="context"></param>
/// <param name="returnMsg"></param>
/// <returns></returns>
private bool EditAddress(HttpContext context, ref string returnMsg)
{
try
{
string AccessToken = "";//AccessToken
string URL = context.Request["path"].Trim().ToString() + "&SID=1&code=" + context.Session["code"].ToString() + "&state=1&showwxpaytitle=1"; //当前页面的URL
if (context.Session["UID"] == null || context.Session["UID"].ToString() == "0" || context.Session["UID"].ToString() == "")
{
returnMsg = "-99";//请先关注公众号,才能进行下订单操作
return false;
}
if (context.Session["accessToken"] != null || context.Session["accessToken"].ToString() != "")
{
AccessToken = context.Session["accessToken"].ToString(); //通过Oauth2获取的AccessToken
string Nonce = CreateRandomCode(15).ToLower(); //随机字符串
string time = ConvertDateTimeInt(DateTime.Now).ToString();//时间戳
string sha1 = "accesstoken=" + AccessToken +
"&appid=" + PayHandle.AppID.ToString() + //公众号APPID
"&noncestr=" + Nonce +
"×tamp=" + time +
"&url=" + URL;
string sha =Hash(sha1).ToLower(); //HASH加密
returnMsg = PayHandle.AppID.ToString() + "," + sha + "," + time + "," + Nonce;//共享收货地址请求参数
return true;
}
else
{
returnMsg = "-99";//请先关注公众号,才能进行下订单操作
return false;
}
}
catch (Exception ex)
{
T9.Util.LogUtil.WriteLog(ex.Message + "\r\n" + ex.StackTrace, "WebLog");
returnMsg = "-98";
return false;
}
}
/// <summary>
/// 生成随机字符串
/// </summary>
/// <param name="codeCount"></param>
/// <param name="allChar"></param>
/// <returns></returns>
public static string CreateRandomCode(int codeCount)
{
//验证码中的出现的字符,避免了一些容易混淆的字符。
string allChar = "3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,M,N,P,Q,R,S,T,U,W,X,Y";
string[] allCharArray = allChar.Split(',');
string randomCode = "";
int temp = -1;
bool breCreate = (codeCount < 6 && allCharArray.Length > 15);
Random rand = new Random();
for (int i = 0; i < codeCount; i++)
{
if (temp != -1)
{
rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
}
int t = rand.Next(allCharArray.Length);
if (temp == t && breCreate)
{
return CreateRandomCode(codeCount);
}
temp = t;
randomCode += allCharArray[t];
}
return randomCode;
}
/// <summary>
/// datetime转换为unixtime
/// </summary>
/// <param name="time"></param>
/// <returns></returns>
public int ConvertDateTimeInt(System.DateTime time)
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
return (int)(time - startTime).TotalSeconds;
}
/// <summary>
/// Hash算法
/// </summary>
/// <param name="myStr"></param>
/// <returns></returns>
public string Hash(string myStr)
{
//建立SHA1对象
SHA1 sha = new SHA1CryptoServiceProvider();
//将mystr转换成byte[]
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
byte[] dataToHash = enc.GetBytes(myStr);
//Hash运算
byte[] dataHashed = sha.ComputeHash(dataToHash);
//将运算结果转换成string
string hash = BitConverter.ToString(dataHashed).Replace("-", "");
return hash;
}
C# 微信共享收货地址 V1.6的更多相关文章
- 微信共享收货地址 edit_address:fail 吐白沫级解决方案
又被微信坑了一整天,看完官方文档怎么测试都不通过,我一直怀疑是新版本微信支付我没有设置“共享收货地址”开关造成的. 后来经过验证,新版本不需要做这件事了. 那么,我没错,是微信的文档没及时更新... ...
- 微信支付开发(7) 收货地址共享接口V2
关键字:微信公众平台 JSSDK 发送给朋友 收货地址共享接口 openAddress 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/p/weixin-open ...
- 微信支付v3开发(6) 收货地址共享接口
请看新版教程 微信支付开发(7) 收货地址共享接口V2 本文介绍微信支付下的收货地址共享接口的开发过程. 一. 简单介绍 微信收货地址共享,是指用户在微信浏览器内打开网页,填写过地址后,兴许能够免填 ...
- 微信小程序-收货地址左滑删除
我参照了其中的部分代码,如:bindtouchstart,bindtouchmove,bindtouchend事件多数组中偏移值的更改, 在结合微信 movable-area 和 movable-vi ...
- ecshop 订单-》设置默认收货地址,或者删除
设置位置:ecs_users标的 country字段,默认是0,默认地址是 users_address 的address_id 设置默认收货地址 /** * 设置默认地址 * * @access ...
- 【地图API】收货地址详解2
上次讲解的方法是: 在地图中心点添加一个标注,每次拖动地图就获取地图中心点,再把标注的位置设置为地图中心点.可参考教程:http://www.cnblogs.com/milkmap/p/6126424 ...
- GWYAlertSelectView 选择收货地址和选择联系人
iOS 开发在app内(特别是在类似购物和旅游类)经常会用到选择,添加联系人和收货地址,而且经常都是在跳转界面,很是麻烦,今天我就自己封装了一个类似弹出视图的代码,方便了很多!demo地址: http ...
- 方便代理下单的EcStore收货地址一键分析插件,同时支持淘宝/京东/一号店
使用EcStore开展分销的网站,代理需要经常代客下单,每个客户收货地址都不同,要选择和填写多个内容才能完成地址输入:省.市.区.详细地址.收货人姓名.手机电话等,非常麻烦,也容易输入错误.安装EcS ...
- DRF 商城项目 - 用户操作(收藏, 留言, 收货地址)
个人收藏 整体逻辑类似于 个人中心 ( 个人中心的相关逻辑梳理详情 点击这里 ) 也是两个序列化组价的分流 查看收藏 ( list ) 详情指向 收藏详情 的组价 创建收藏 ( create ) ...
随机推荐
- 云计算openstack——云计算、大数据、人工智能(16)
一.互联网行业及云计算 在互联网时代,技术是推动社会发展的驱动,云计算则是一个包罗万象的技术栈集合,通过网络提供IAAS.PAAS.SAAS等资源,涵盖从数据中心底层的硬件设置到最上层客户的应用.给我 ...
- 剑指offer 59-II 队列的最大值
题目描述 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value.push_back 和 pop_front 的均摊时间复杂度都是O(1). 若队列为空,pop_ ...
- 北京数途科技有限公司--EAM MAXIMO介绍
一.EAM概述: EAM( Enterprise Asset Management)即企业资产维护管理系统 ,它是面向资产密集型(Asset-intensive)企业的企业信息化 解决方案的总称,其前 ...
- 《Java核心技术卷一》之 泛型
一.引言 在学习集合的时候我们会发现一个问题,将一个对象丢到集合中后,集合并不记住对象的类型,统统都当做Object处理,这样我们取出来再使用时就得强制转换类型,导致代码臃肿,而且加入集合时都是以Ob ...
- 常见消息中间件之RocketMQ
前言 RocketMQ是一款分布式.队列模型的消息中间件,由阿里巴巴自主研发的一款适用于高并发.高可靠性.海量数据场景的消息中间件.早期开源2.X版本名为MetaQ:2015年迭代3.X版本,更名为R ...
- Java源码赏析(二)Java常见接口
一.Comparable接口 package java.lang; import java.util.*; public interface Comparable<T> { /** * i ...
- 精心总结ansible-playbook剧本的这6种变量
#变量作用 #根据需求灵活修改,如:需要安装不同版本号的服务,或进行版本升级回退等 1.通过vars定义变量 #1.1.定义一个变量 version: 1.1.2 #定义多个变量 vars: - v1 ...
- Go-注释
什么是注释? 注释是给开发人员看的,目的是降低开发人员阅读代码的时间成本和代码阅读困难程度 Go-注释内容 1. 包注释,位于某个包下Go程序文件的顶部 2. 函数注释,位于Go函数的头部 3. 代码 ...
- Python练习题 038:Project Euler 010:两百万以内所有素数之和
本题来自 Project Euler 第10题:https://projecteuler.net/problem=10 # Project Euler: Problem 10: Summation o ...
- Book of Shaders 03 - 学习随机与噪声生成算法
0x00 随机 我们不能预测天空中乌云的样子,因为它的纹理总是具有不可预测性.这种不可预测性叫做随机 (random). 在计算机图形学中,我们通常使用随机来模拟自然界中的噪声.如何获得一个随机值呢, ...