2015-07-31 14:36:06 zhouleizhao 阅读数 1260

1.需要后台提供.pem格式的Openssl公钥文件,也可以自己制作。具体请参考:http://www.qmailer.net/archives/216.html(OpenSSL密钥相关命令

char *my_encrypt(const char *str,const char *path_key){

     char *p_en;
     RSA *p_rsa;
     FILE *file;
     int flen,rsa_len;
     if((file=fopen(path_key,"r"))==NULL){
         perror("open key file error");
         return NULL;
     }
     if((p_rsa=PEM_read_RSA_PUBKEY(file,NULL,NULL,NULL))==NULL){
     //if((p_rsa=PEM_read_RSAPublicKey(file,NULL,NULL,NULL))==NULL){
         ERR_print_errors_fp(stdout);
         return NULL;
     }
    NSString * plainString = @"plainString";
    int len = (int) [plainString length];//待加密字母串长度
    unsigned char *plainBuffer = (unsigned char *) [plainString UTF8String];
    int clen = RSA_size(p_rsa);
    unsigned char *cipherBuffer = calloc(clen, sizeof(unsigned char));
    

    RSA_public_encrypt(len, plainBuffer, cipherBuffer, p_rsa, RSA_PKCS1_PADDING);

    return cipherBuffer;

}


2.也可以尝试:

- (NSString *)encryptWithString:(NSString *)content

{
   NSData *publicKey = [NSData dataFromBase64String:RSA_KEY_BASE64];
   
    NSData *usernamm = [content dataUsingEncoding: NSUTF8StringEncoding];
   
    NSData *newKey= [SecKeyWrapper encrypt:usernamm publicKey:publicKey];
 
    NSString *result = [newKey base64EncodedString];
    
    return result;
}


参考链接:http://www.cnblogs.com/aLittleBitCool/archive/2011/09/22/2185418.html

                  http://www.qmailer.net/archives/216.html

2014-08-21 12:20:30 u012951123 阅读数 1645
2016-05-05 10:31:26 wu121jia 阅读数 581

在微信官方下载的SDK,ASP.NET版本,在IOS上微信支付完成后,会发生点击完成,不进入function(res)函数的情况,在PHP版本中未出现这种情况。经过一天多的调试,

期初以为是后台生成json字符串问题,后来一一排查,发现是前台的HTML代码出了问题。ASP.NET版本的onload函数写在了html的body中,导致了IOS版本微信不能正确识别,将其改成JS的window.onload函数执行,就不会出现这种问题了。

2016-05-11 22:44:39 u013037201 阅读数 7630

 引言

        最近公司交给我个任务,为IOS移动端写接口。现有公司的软件是ASP.NET做的,现在想把某些功能移植到IOS APP上。大多数对外接口会实现webservice方法,但经理却让用http接口来进行交互。

区别

         怀着一颗好奇心了解了一下webservice和httpservice的区别。

         webservice是使用soap协议得到想要的东西,soap请求是HTTP POST的一个专用版本,遵循一种特殊的xml消息格式Content-type设置为:text/xml任何数据都可以xml化。webservice相比httpservice能处理些更加复杂的数据类型。如果在后台调用一个其它应用的服务,这个时候,必须要用webService的方式来调用。

         httpsevice通过post和get得到想要的东西。在处理数据上HTTPService效率较高。当调用一个本服务的时候,不涉及跨域的问题,可以使用HttpService的方式。

         相比于httpservice,webservice接口中实现的方法和要求参数一目了然;不用担心大小写问题,不用担心中文urlencode问题,代码中不用多次声明认证(账号、密码)参数;传递参数可以为数组、对象等。但是由于它由于xml解析,速度可能会有所减低。

         当然,现在的开放平台都是用的HTTP实现的,webservice完全可以被httpservice替代。

例子

         基于httpservice协议一个提供接口的登录例子(Web层):       

         以下接口通过request获取参数,然后通过调B层,B层调D层进行返回,提供json字符串参数。

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace UTRWebService
{
    public partial class Problemdetail : System.Web.UI.Page
    {
        BLL.ProblemDataList bll = new BLL.ProblemDataList();
        protected void Page_Load(object sender, EventArgs e)
        {
            Bing();
        }

        public void Bing()
        {


            try
            {
                string problem = DataSwitch.ConvertObjectToString(Request["problem"]);

                if (!string.IsNullOrEmpty(problem))
                {
                    StringBuilder str = new StringBuilder();

                    DataTable  problemdetail = bll.getproblemdetail(problem);
                       IList<Model.ProblemDerail> ProblemContent = bll.getproblemContent(problem);

                       if (problemdetail.Rows.Count > 0)
                       {
                           string strl = problemdetail.Rows[0]["ProblemDescribe"].ToString();
                           string regexstr = @"<[^>]*>";    //去除所有的标签
                           strl = Regex.Replace(strl, regexstr, string.Empty, RegexOptions.IgnoreCase);

                           str.Append("{ \"id\":" + problemdetail.Rows[0]["ProblemID"] + ",\"zhaiyao\":\"" + problemdetail.Rows[0]["Title"] + "\",\"fxsj\":\"" + problemdetail.Rows[0]["CreateTime"].ToString() + "\",\"jjcd\":\"" + problemdetail.Rows[0]["PriorityName"].ToString() + "\",\"wtmx\":\"" + strl + "\",\"lines\":" + ToJson.toJson(ProblemContent) + "}");
                           Response.Write(str.ToString());
                       }

                       else
                       {
                           string result = "暂无数据";
                           Response.Write("{\"success\":\"" + result + "\"}");
                       }


                  

                }
                else
                {
                    string result = "暂无数据";
                    Response.Write("{\"success\":\"" + result + "\"}");
                }
                //}
                //else
                //{
                //    // List<Model.ProblemDataList> ProblemList = new List<Model.ProblemDataList>();
                //    string result = "false";
                //    Response.Write("{\"success\":\"" + result + "\"}");

                //    //Response.Write(ToJson.toJson(ProblemList));
                //}
            }
            catch (Exception ex)
            {
                string result = "false";
                Response.Write("{\"success\":\"" + result + "\"}");
            }


        }

    }
}

小结

       向移动端或是PC端提供接口,看了这些,相信读者对其有了一定的了解,用WebService还是HttpService视情况而定,如果文中有不妥之处还请斧正。

        

 

2014-12-15 14:14:13 CsharpDonet 阅读数 512

最近在做项目的时候用到了QQ第三方接口,腾讯提供了JS、安卓、IOS、php的SDK,但是没有C#的SDK。一开始我是在前台直接用JS的SDK做登陆验证,但是做完自己就感觉这样很可笑,JS是暴露给客户端的,那么客户完全可以直接绕过去,进入到你的后台。

所以我在通过登陆验证后回调后台页面,在后台进行合法性验证,防止非法登陆。

原理就是后台通过httpwebrequest操作第三方接口

复制代码
        /// <summary>
        /// HTTP POST方式请求数据
        /// </summary>
        /// <param name="url">URL.</param>
        /// <param name="param">POST的数据</param>
        /// <returns></returns>
        public static string HttpPost(string url, string param)
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.Accept = "*/*";
            request.Timeout = 15000;
            request.AllowAutoRedirect = false;

            StreamWriter requestStream = null;
            WebResponse response = null;
            string responseStr = null;

            try
            {
                requestStream = new StreamWriter(request.GetRequestStream());
                requestStream.Write(param);
                requestStream.Close();

                response = request.GetResponse();
                if (response != null)
                {
                    StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                    responseStr = reader.ReadToEnd();
                    reader.Close();
                }
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                request = null;
                requestStream = null;
                response = null;
            }

            return responseStr;
        }
复制代码

需要源代码的可自行下载。
基于C#的QQ第三方接口接入源码

从腾讯官方申请到开发者账号然后通过了应用接入,把开发者账号和appkey放入配置文件就可以了,亲测可用。

IOS中BLE4.0后台运行

阅读数 643

没有更多推荐了,返回首页