C#手机充值

C#手机充值系统开发(基于聚合数据)

说是手机充值系统有点装了,其实就是调用了聚合数据的支付接口,其实挺简单的事 但是我发现博客园竟然没有类似文章,我就个出头鸟把我的代码贡献出来吧

首先说准备工作:

去聚合数据申请账号-添加手机支付的认证-认证通过后为账户充值。

上述工作完成后,开始准备开发要用到的必要参数:

appid:在个人中心-我的数据中可找到对应的APPKEY(每个不同的接口都需要使用对应的appkey)

openid:个人中心-用户中心-账户信息(这个是唯一的程序中会使用到)

对应的接口都有比较详细的数据接收已经返回参数的说明,具体开发中会用到,具体的请查看链接:https://www.juhe.cn/docs/api/id/85

接下来要准备开发中的用到几个辅助函数,在对应的API文档中有示例代码,也可以使用下面的:

 

这几个函数具体的功能就不用说了 ,是代码很简单,都是网络链接发送请求和接受请求是时用的,我主要介绍的是点中未提供的一些

示例代码中用到了JsonObject这个类 代码中提供的是CSDN的链接,竟然还要2积分才能下载,坑爹啊 在这里我给大家分享出来吧 http://pan.baidu.com/s/1hsqF51y

在项目中应用DLL加入using Xfrog.Net;命名空间

准备工作结束

接下来就进入正式编码阶段了 ,开始前我准备说一下重点,其实接口的代码并不复杂,我想说了还是思路吧

1.验证当前账户余额是否够本次充值:调用 http://op.juhe.cn/ofpay/mobile/yue 具体参数参看:https://www.juhe.cn/docs/api/id/85

2.检测手机号是否可以充值:调用http://op.juhe.cn/ofpay/mobile/telcheck    具体参数参看:https://www.juhe.cn/docs/api/id/85/aid/213

3.调用手机直冲接口:   http://op.juhe.cn/ofpay/mobile/onlineorder       具体参数参看: https://www.juhe.cn/docs/api/id/85/aid/214

4.调用订单查询接口:http://op.juhe.cn/ofpay/mobile/ordersta                具体参数参看:https://www.juhe.cn/docs/api/id/85/aid/586

5.编写回调处理页面:QQ上搜索聚合数据的客服,给他账号和回调地址后,让他帮助设置,具体的回调地址接受参数查看:http://code.juhe.cn/docs/detail/id/1565

具体代码贴出:

            //1.账户余额查询
            string url1 = "http://op.juhe.cn/ofpay/mobile/yue";

            var parameters1 = new Dictionary<string, string>();

            string timestamp = GetTimeStamp();
            parameters1.Add("timestamp", timestamp); //当前时间戳,如:1432788379
            parameters1.Add("key", appkey);//你申请的key
            string signstr =openid+ appkey+timestamp;
            parameters1.Add("sign", CommonManager.String.EncryptMD5SystemDefaultMethod(signstr, false, true)); //校验值,md5(&lt;b&gt;OpenID&lt;/b&gt;+key+timestamp),OpenID在个人中心查询

            string result1 = sendPost(url1, parameters1, "get");

            JsonObject newObj1 = new JsonObject(result1);
            String errorCode1 = newObj1["error_code"].Value;

            //查询余额是否成功
            if (errorCode1 == "0")
            {

                //判断余额是否够本次充值
                if (double.Parse(newObj1["result"]["money"].Value) > double.Parse(Integrals))

                {
                     //msg.InnerText="余额充足!";

                    //5.检测手机号码是否能充值
                    string url5 = "http://op.juhe.cn/ofpay/mobile/telcheck";

                    var parameters5 = new Dictionary<string, string>();

                    parameters5.Add("phoneno", phone); //手机号码
                    parameters5.Add("cardnum", Integrals); //充值金额,目前可选:5、10、20、30、50、100、300
                    parameters5.Add("key", appkey);//你申请的key

                    string result5 = sendPost(url5, parameters5, "get");

                    JsonObject newObj5 = new JsonObject(result5);
                    String errorCode5 = newObj5["error_code"].Value;

                    if (errorCode5 == "0")
                    {
                         //可以充值
                        //7.手机直充接口
                        string url7 = "http://op.juhe.cn/ofpay/mobile/onlineorder";

                        var parameters7 = new Dictionary<string, string>();
                        parameters7.Add("phoneno", phone); //手机号码
                        parameters7.Add("cardnum", Integrals); //充值金额,目前可选:5、10、20、30、50、100、300
                        parameters7.Add("orderid", orderstr); //商家订单号,8-32位字母数字组合
                        parameters7.Add("key", appkey);//你申请的key
                        string md5str = openid + appkey + phone + Integrals + orderstr;
                        parameters7.Add("sign", CommonManager.String.EncryptMD5SystemDefaultMethod(md5str, false, true)); //校验值,md5(&lt;b&gt;OpenID&lt;/b&gt;+key+phoneno+cardnum+orderid),OpenID在个人中心查询

                        string result7 = sendPost(url7, parameters7, "get");

                        JsonObject newObj7 = new JsonObject(result7);
                        String errorCode7 = newObj7["error_code"].Value;

                        if (errorCode7 == "0")
                        {
                            msg.InnerText = "充值订单创建成功,等待商户充值后查看订单状态!";

                            DbSession.Default.FromSql(
                            @"UPDATE TOP(1) TPropLog SET [email protected],[email protected] WHERE ID = @ID")
                            .AddInputParameter("@ID", DbType.Int32, id)
                            .AddInputParameter("@PropStatus", DbType.Int32, 3)
                            .AddInputParameter("@Jhorderid", DbType.String, newObj7["result"]["sporder_id"].Value)
                            .Execute();
                            status.SelectedValue = "3";
                        }
                        else
                        {
                            msg.InnerText = "充值订单失败!失败原因:" + newObj7["reason"].Value;
                        }

                    }
                    else
                    {
                        msg.InnerText = "手机号不能充值!原因:" + newObj1["reason"].Value;
                    }

                }
                else
                {
                    msg.InnerText = "余额不足请充值!当前账户余额为:" + newObj1["result"]["money"].Value;
                }

            }
            else
            {
                 msg.InnerText="余额查询失败!";

            }

里面有几个点注意一下:

1.需要sign签名的几个接口需要按照格式使用MD5进行一个转换,MD5转换的函数网上一大把相信你的项目中也有了我就不提供了 ,按照他提供的格式组织签名就行了

2.我的订单查询接口是写在另外一个函数里的,因为我的逻辑充值后单独可以查询,可根据情况自行更改。

3.回调页面是POST方式传值,所以接受的时候按照他提供的参数接收就行了,根据返回的订单号跟新本地数据

        //聚合话费充值回调页面,页面的设置需要联系聚合客服更改
        protected void Page_Load(object sender, EventArgs e)
        {

            var sporder_id = CommonManager.Web.Request("sporder_id", "");//聚合订单ID
            var orderid = CommonManager.Web.Request("orderid", "");      //鼎鼎订单ID
            var sta = CommonManager.Web.Request("sta", "");               //充值状态1:成功 9:失败
            if (sta == "1")
            {
               //更新订单状态为充值成功
                DbSession.Default.FromSql(
                        @"UPDATE TOP(1) TPropLog SET [email protected] WHERE Jhorderid = @Jhorderid")
                        .AddInputParameter("@PropStatus", DbType.Int32, 4)
                        .AddInputParameter("@Jhorderid", DbType.String, sporder_id)
                        .Execute();
                Response.Clear();
                Response.Write("success");
                Response.End();
            }
            if (sta == "9")
            {
                //更新订单状态为充值成功
                DbSession.Default.FromSql(
                        @"UPDATE TOP(1) TPropLog SET [email protected] WHERE Jhorderid = @Jhorderid")
                        .AddInputParameter("@PropStatus", DbType.Int32, 5)
                        .AddInputParameter("@Jhorderid", DbType.String, sporder_id)
                        .Execute();
                Response.Clear();
                Response.Write("success");
                Response.End();
                //更新订单状态为充值失败
            }

        }

重点回顾:

1.JsonObject.DLL下载

2.签名顺序和字符要按照提供的做

3.回调地址要找客服设置

4.单个手机号每天有充值数量和次数的限制,超过次数会导致订单一直提示进行中,最后失败,失败也会有回调提示的

5.测试的时候可以将vs自带的iis调试工具配合ngrok映射到外网,这样直接就可以调试回调页面,改天我会写一个简单的教程,如何使用vs默认的iis映射到外网进行调试(微信的外网调试也可以这么做,非常方便哦)

时间: 2024-10-13 03:31:30

C#手机充值的相关文章

WePY 在手机充值小程序中的应用与实践

wepyjs 发布了两个月了,中间经历了很多版本更新,也慢慢开始有一些用户选择 wepyjs 作为开发框架来开发小程序,比如一些线上小程序. 以及一些来自网上的 wepyjs 的相关资源: demo源码: one,图书管理系统 组件:图表控件 因此我也将手机充值小程序在开发过程中 wepyjs 的应用心得分享出来,可以参照对比与传统小程序开发上的差异. 说明:本文不涉及到 wepyjs 的使用与说明,如果需要请参看我的另一篇文章 "打造小程序组件化开发框架" 或直接参看wepyjs 项

仿京东手机充值进度导航

由于项目要做一个充值功能,看京东的手机充值进度条导航觉得还不错 于是模仿他做了一个,不过没搞那么复杂,不分那么多颜色了.通过分析可以看出此进度导航关键在于每个li右边的箭头,这个可以用css的:after选择器搞定,记住不要用::after这种写法,这种写法在IE8下会失效的,至于IE8以前的IE浏览器则不能正确的还原我想要的效果,不知道哪位大神可以教一下我如何在IE8以前正确的使用:after选择器. 首先定义一个ul样式progress-nav: 其中list-style:none是用于消除

Android自定义控件3:带边框点击背景变色的textview,原型是支付宝手机充值中话费充值按钮

一.原型:支付宝手机充值中话费充值按钮. 二.实现效果: 三.在res/drawable下面创建两个xml: custom_border_txt_bg.xml用户可点击时,点击切换背景 custom_border_txt_bg2.xml不可以点击时,自定义的背景 custom_border_txt_bg.xml: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="

(转)接口100

关键字:微信公众平台 微接口 接口100 API100 接口大全 作者:方倍工作室 在本文中,我们列出微信公众平台上可以使用的API接口以及举例如何在微信公众平台调用这些接口实现相应的功能. 接口调用说明:① Appkey请使用的微信公众号,不要使用默认的trailuser② 接口返回类型为文本.图文.及音乐三种基本消息③ 请在所有消息底部主动加上"技术支持 方倍工作室"④ JSON验证网址 http://pro.jsonlint.com/⑤ 接口将不定期增加或更新,欢迎指出错误⑥ 如

socket介绍(webService适用场景)

1.使用场景         - 不同的移动客户端访问      - 需要访问第三方的项目 2.访问第三方应用的方式      ISO的七层模型  : 物理层.数据链路层.网络层.传输层.表示层.会话层.应用层     - Socket访问  : Socket属于传输层,它是对Tcp/ip协议的实现,包含TCP/UDP,它是所有通信协议的基础,Http协议需要Socket支持,以Socket作为基础 Socket通信特点:      1. 开启端口,该通信是 长连接的通信 ,很容易被防火墙拦截,

微信支付与支付宝钱包的竞争分析

NO1: 十九世纪七十年代起,“物竞天择,适者生存,优胜劣汰”已逐渐成为现代生物学的口号.而今,不知不觉中,它似乎也成了当代社会学的口号.罗素说:“竞争一直是,甚至从人类起源起就是对大部分激烈活动的剌激物.”所谓“长江后浪推前浪”,在人类资讯的迅速积累之下,如果不能追上时代,自然就要被淘汰了.竞争,已经成了当代社会政治经济发展的重要基础与必然趋势. 从远古时期的以物换物,到后来货币的出现,直到宋朝时第一张纸币“交子”问世,随着经济的不断发展,货币的形式也在不断地变化着. 2003年10月18日,

微信小程序开发类型有哪些?

广州微信小程序开发公司(www.dthulian.com)品向科技表示,随着现在的互联网最热门话题,应该是微信小程序开发.那么我们就和大家来探讨下微信小程序开发类型有哪些? 首先微信小程序是什么? 微信小程序是由微信之父张小龙提出的一个概念,小程序是一种不需要下载安装就可以使用的应用,它实现了触手可及的梦想,用户只需扫一扫或者搜一下就可以打开应用.也体现了用完即走的理念,用户不用关心是否安装太多应用的问题,应用将无处不在,应用将随时可用,但又无需考虑安装及卸载. 对用户来讲,小程序可以实现"用完

微信版本更新日志分析

微信,中国在移动端时代最成功的产品.当我们审视微信的成功的时候,很多人说“是因为腾讯用户量大带量”“因为摇一摇功能方便大家约炮” ..... 这些可能是微信成功的因素之一,但一定不是微信成功的主要原因(不然,为什么同样占有腾讯资源的输入法和浏览器都没有成功). 成功从不是某一个点导致的成功,而是厚积薄发的积累,不断的修正,作出的正确的决定比错误的多,以及多方面的历史进程相互的促进,顺应大势,正如一位伟人说过,“一个人的成功既要靠自身的努力也要考虑到历史的进程”. 把微信这么多年来的更新日志整理一

jsp、JavaScript与html

0.先看一个实例 <BODY>内嵌子标签: <H>- - </H>   :文章标题 <FONT size="12" color="red"face="律书">...</FONT>         :字体标签,控制文本的大小.颜色.字体 <H#> ... </H#> :#=1, 2, 3, 4, 5, 6   6级字号 <P>...</P>