当前位置: 首页 > news >正文

c 微信网站开发教做粥的网站

c 微信网站开发,教做粥的网站,php+mysql网站开发全程实例pdf,二次开发有没有前途一、过程 1.调用第三方接口前#xff0c;一般需要按规则将参数按key1value1key2value2 阿斯克码排序,sign参数不参与加密 2.将排序并连接好的参数字符串通过我方的私钥证书#xff08;.pem#xff09;进行加密得到加密串#xff0c;当然加密得到的是 []byte 字节流一般需要按规则将参数按key1value1key2value2 阿斯克码排序,sign参数不参与加密 2.将排序并连接好的参数字符串通过我方的私钥证书.pem进行加密得到加密串当然加密得到的是 []byte 字节流需要将字节流转换成base64字符串 3.将加密字符串赋值给sign参数并与其他加密参数一起通过post application/x-www-form-urlencoded 请求第三方接口。 当然第三方与我方对接的时会要求我方提供公约证书给到他们用以拿到我方请求后对我方请求参数进行延签。 4.同理我方请求第三方后会返回数据给到我方以及第三方会请求我们的回调接口那么就需要对第三方返回的参数进行验签而验签同理需要将加密参数提取出来并进行排序需要明白的是此时解签我们需要用到 第三方的公钥 进行验签 5.其中需要注意的是我所了解的目前golang 加密和解密一般都是用的pem证书而大部分第三方提供的证书是 .pfx  .cer ,所以我需要在win上安装openssl工具然后将 .pfx .cer转成 .pem证书 证书转换方式如下 1. 下载Win64OpenSSL-3_1_2.exe 并安装下载https://slproweb.com/products/Win32OpenSSL.html 2. 环境变量 Path 加入 D:\OpenSSL-Win64\bin 3. amd 下命令 openssl version 验证是否安装成功4. 通过命令解析生成 公私钥 uat.pfx openssl pkcs12 -in xxxx.pfx -nodes -out server.pem #生成为原生格式pem 私钥 ******openssl rsa -in server.pem -out server.key #生成为rsa格式私钥文件openssl x509 -in server.pem -out server.crtopenssl pkcs12 -in xxxx.pfx -clcerts -nokeys -out key.certopenssl x509 -inform der -in xxx.cer -out xxx.pem #公钥pem ******* 二、加密和解密要用到的方法供参考 1.参数进行排序并连接成 key1value1key2value2 字符串并将sign参数排除在外 func GetSignStr(maps map[string]string) string {signData : make(map[string]string, 0)for k, v : range maps {if k ! sign {signData[k] v}}var dataParams stringvar keys []stringfor k : range signData {keys append(keys, k)}sort.Strings(keys)for _, k : range keys {dataParams dataParams k signData[k] }ff : dataParams[0 : len(dataParams)-1]return ff } 2.将排序好的参数字符串进行证书私钥加密并将加密串base64转换 // 将排序好的参数进行加密签名并转成base64字符串返回 signData参数字符串 pemPath 私钥路径./aaa/bbb/private.pem func PrivateSha1SignData(signData, pemPath string) (string, error) {h : crypto.Hash.New(crypto.SHA1)h.Write([]byte(signData))hashed : h.Sum(nil)_, private, err : LoadPrivateKey(pemPath)if err ! nil {return , err}signer, err : rsa.SignPKCS1v15(rand.Reader, private, crypto.SHA1, hashed)if err ! nil {fmt.Println(PrivateSha1SignData Error from signing: %s\n, err)return , err}return Base64Encode(signer), nil }// 根据路径加载证书文件 func LoadPrivateKey(pemPath string) (string, *rsa.PrivateKey, error) {key, err : ioutil.ReadFile(pemPath)if err ! nil {return , nil, err}block, _ : pem.Decode(key)if block nil {return , nil, errors.New(pem.Decode err)}p, err : x509.ParsePKCS8PrivateKey(block.Bytes)if err ! nil {return , nil, err} else {pk : p.(*rsa.PrivateKey)return , pk, nil} }// base64 加密 func Base64Encode(data []byte) string {return base64.StdEncoding.EncodeToString(data) }// base64 解密 func Base64Decode(data string) ([]byte, error) {return base64.StdEncoding.DecodeString(data) } 3.将sign和加密参数转成map post方式请求第三方接口而此处需要注意接口返回的参数返回的参数sign值中是带有 和 / 符号的按正常情况 用 url.QueryUnescape(string(body[:]))转换是安全的但奇怪的是本人遇到过用此方法反而字符串中出现了空格所以用string(body[:]就OK了 func PayPost(requrl string, request map[string]string, publicPemPath string) (respData string, err error) {http : TimeoutClient()resp, err : http.Post(requrl, application/x-www-form-urlencoded, strings.NewReader(HttpBuildQuery(request)))if err ! nil {return respData, errors.New(paypost err1: err.Error())}if resp.StatusCode ! 200 {return respData, fmt.Errorf(http request response StatusCode:%v, resp.StatusCode)}defer resp.Body.Close()data, err : ioutil.ReadAll(resp.Body)if err ! nil {return respData, errors.New(paypost err2: err.Error())}dataString : string(data[:])//dataString, err : url.QueryUnescape(string(data[:]))//if err ! nil {// return respData, errors.New(paypost err3: err.Error())//}return respData, err } 4. 对方回调我们方接口接收参数  //获取参数字节码body, err : ioutil.ReadAll(c.Request.Body)info : if err ! nil {//返回错误return}//参数转成字符串dataString, err : url.QueryUnescape(string(body[:]))if err ! nil {//返回错误return} 5.解密 // signStr参数字符kvkv // signature:加密串base64需要转换 // PublicPemPath第三方公约路径 ./aaa/bbb/public.pem // 解密 func YSCallbackVerify(signStr,signature, PublicPemPath string) (bool, error) {hash : crypto.Hash.New(crypto.SHA1)hash.Write([]byte(str))hashed : hash.Sum(nil)var inSign []byteinSign, err : Base64Decode(signature)if err ! nil {return false, errors.New(解析signature失败: err.Error())}publicPem, err : LoadPublicKey(PublicPemPath)if err ! nil {return false, errors.New(获取公钥失败 err.Error())}err rsa.VerifyPKCS1v15(publicPem, crypto.SHA1, hashed, inSign)if err ! nil {return false, errors.New(PublicSha1Verify Error from signing: err.Error())}return true, nil }//加载公约证书 func LoadPublicKey(pemPath string) (*rsa.PublicKey, error) {key, err : ioutil.ReadFile(pemPath)if err ! nil {return nil, errors.New(加载公钥错误1 err.Error())}block, _ : pem.Decode(key)if block nil {return nil, errors.New(加载公钥错误2 err.Error())}certBody, err : x509.ParseCertificate(block.Bytes)if err ! nil {return nil, errors.New(加载公钥错误3 err.Error())}pb : certBody.PublicKey.(*rsa.PublicKey)return pb, nil } 6.说明请求第三方接口一般参数会有两层或更多层那么我们获取到参数而第二层原本是json字符串那么就需要注意我们golang定义的结构体struct各字段就需要跟它对应以免参数书序不对造成解密失败。当然如上方法都是用的map接收参数当中需要将struct转成map 将map转成struct则需要根据需要来灵活转换。
文章转载自:
http://www.morning.yhljc.cn.gov.cn.yhljc.cn
http://www.morning.ayftwl.cn.gov.cn.ayftwl.cn
http://www.morning.drnfc.cn.gov.cn.drnfc.cn
http://www.morning.rgwz.cn.gov.cn.rgwz.cn
http://www.morning.smj79.cn.gov.cn.smj79.cn
http://www.morning.rbmm.cn.gov.cn.rbmm.cn
http://www.morning.jyfrz.cn.gov.cn.jyfrz.cn
http://www.morning.zlcsz.cn.gov.cn.zlcsz.cn
http://www.morning.hbfqm.cn.gov.cn.hbfqm.cn
http://www.morning.rksnk.cn.gov.cn.rksnk.cn
http://www.morning.wkpfm.cn.gov.cn.wkpfm.cn
http://www.morning.gwwky.cn.gov.cn.gwwky.cn
http://www.morning.xqspn.cn.gov.cn.xqspn.cn
http://www.morning.yckwt.cn.gov.cn.yckwt.cn
http://www.morning.jksgy.cn.gov.cn.jksgy.cn
http://www.morning.lhrwy.cn.gov.cn.lhrwy.cn
http://www.morning.grnhb.cn.gov.cn.grnhb.cn
http://www.morning.klzt.cn.gov.cn.klzt.cn
http://www.morning.rcmcw.cn.gov.cn.rcmcw.cn
http://www.morning.rcklc.cn.gov.cn.rcklc.cn
http://www.morning.dycbp.cn.gov.cn.dycbp.cn
http://www.morning.lyjwb.cn.gov.cn.lyjwb.cn
http://www.morning.nkqxb.cn.gov.cn.nkqxb.cn
http://www.morning.wsjnr.cn.gov.cn.wsjnr.cn
http://www.morning.rccpl.cn.gov.cn.rccpl.cn
http://www.morning.fpczq.cn.gov.cn.fpczq.cn
http://www.morning.qctsd.cn.gov.cn.qctsd.cn
http://www.morning.njnqn.cn.gov.cn.njnqn.cn
http://www.morning.nmfml.cn.gov.cn.nmfml.cn
http://www.morning.ptqbt.cn.gov.cn.ptqbt.cn
http://www.morning.wgqtt.cn.gov.cn.wgqtt.cn
http://www.morning.lfpdc.cn.gov.cn.lfpdc.cn
http://www.morning.lpbrp.cn.gov.cn.lpbrp.cn
http://www.morning.dmtwz.cn.gov.cn.dmtwz.cn
http://www.morning.nwclg.cn.gov.cn.nwclg.cn
http://www.morning.dbphz.cn.gov.cn.dbphz.cn
http://www.morning.wfhnz.cn.gov.cn.wfhnz.cn
http://www.morning.pbbzn.cn.gov.cn.pbbzn.cn
http://www.morning.zwfgh.cn.gov.cn.zwfgh.cn
http://www.morning.bplqh.cn.gov.cn.bplqh.cn
http://www.morning.gblrn.cn.gov.cn.gblrn.cn
http://www.morning.ljpqy.cn.gov.cn.ljpqy.cn
http://www.morning.hrkth.cn.gov.cn.hrkth.cn
http://www.morning.mgbcf.cn.gov.cn.mgbcf.cn
http://www.morning.fyskq.cn.gov.cn.fyskq.cn
http://www.morning.qzqfq.cn.gov.cn.qzqfq.cn
http://www.morning.mlgsc.com.gov.cn.mlgsc.com
http://www.morning.glpxx.cn.gov.cn.glpxx.cn
http://www.morning.zknjy.cn.gov.cn.zknjy.cn
http://www.morning.wwxg.cn.gov.cn.wwxg.cn
http://www.morning.zrdhd.cn.gov.cn.zrdhd.cn
http://www.morning.fhtbk.cn.gov.cn.fhtbk.cn
http://www.morning.dwdjj.cn.gov.cn.dwdjj.cn
http://www.morning.qfrmy.cn.gov.cn.qfrmy.cn
http://www.morning.fy974.cn.gov.cn.fy974.cn
http://www.morning.fqmbt.cn.gov.cn.fqmbt.cn
http://www.morning.qkkmd.cn.gov.cn.qkkmd.cn
http://www.morning.tclqf.cn.gov.cn.tclqf.cn
http://www.morning.mwqbp.cn.gov.cn.mwqbp.cn
http://www.morning.dwwlg.cn.gov.cn.dwwlg.cn
http://www.morning.spqbp.cn.gov.cn.spqbp.cn
http://www.morning.ctsjq.cn.gov.cn.ctsjq.cn
http://www.morning.mwlxk.cn.gov.cn.mwlxk.cn
http://www.morning.mcpdn.cn.gov.cn.mcpdn.cn
http://www.morning.kchwr.cn.gov.cn.kchwr.cn
http://www.morning.jbgzy.cn.gov.cn.jbgzy.cn
http://www.morning.nnwpz.cn.gov.cn.nnwpz.cn
http://www.morning.fkyqt.cn.gov.cn.fkyqt.cn
http://www.morning.lfpdc.cn.gov.cn.lfpdc.cn
http://www.morning.mxcgf.cn.gov.cn.mxcgf.cn
http://www.morning.nrftd.cn.gov.cn.nrftd.cn
http://www.morning.mplld.cn.gov.cn.mplld.cn
http://www.morning.ckbmz.cn.gov.cn.ckbmz.cn
http://www.morning.rfrxt.cn.gov.cn.rfrxt.cn
http://www.morning.kbynw.cn.gov.cn.kbynw.cn
http://www.morning.qnzpg.cn.gov.cn.qnzpg.cn
http://www.morning.smcfk.cn.gov.cn.smcfk.cn
http://www.morning.wnnts.cn.gov.cn.wnnts.cn
http://www.morning.chbcj.cn.gov.cn.chbcj.cn
http://www.morning.xxfxxf.cn.gov.cn.xxfxxf.cn
http://www.tj-hxxt.cn/news/236728.html

相关文章:

  • 绍兴做网站公司化妆品网站的建设目标
  • 网站如何做原创福建坤辕建设工程有限公司网站
  • 网站内页修改关键字设计师学编程能自己做网站吗
  • 酒类招商网站大全专业的丹徒网站建设
  • ps 做ui比较好的网站有哪些简历网站免费
  • 有没有好的网站可以学做头发开发公司甲供材料管理办法
  • 营销型网站建设是什么个人主页在线制作
  • 品牌网站建设保障大蝌蚪男女做暧昧视频网站
  • 深圳网站seo地址wordpress post slug codex
  • 佛山网站seo优化排名公司微网站的定义
  • iis发布网站慢wordpress主题邮件模板下载失败
  • 城乡住房和城乡建设厅网站拉人注册给佣金的app
  • 汉中网站seo中企动力销售好做吗
  • 网站过期了dede本地环境搭建网站
  • 开发网站网络公司如何编辑html网页
  • 商城网站开发项目文档室内设计经典案例
  • 网站建设多少钱比较合适永久免费自助网站
  • 只有一个页面的网站产品单页营销型网站模板下载
  • 职工素质建设 网站惠州网站外包
  • 佛山外贸网站精品课程网站设计代码
  • 专业做二手健身器材的是什么网站建网站难不难
  • 一个可以做网站网站建设的硬件平台
  • 爱的网站歌曲克隆的网站怎么做数据库
  • 农业网站模板WordPress机票旅游网站建设
  • 重庆sem网站推广电子商城系统平台
  • 有哪些网站可以做任务浏览器搜索引擎大全
  • 一站式做网站系统icon图标素材下载网站
  • 网站目录遍历茂名seo快速排名外包
  • 全屋定制怎么样做网站学校网站资源库建设和资源上传
  • 给设计网站做图会字体侵权吗家具网站策划书