微信小微商户申请入驻 .NET C#实现微信小微商户进件API
微信支付SDK
图片上传
using Helper.Http;
using Model;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using WxPayAPI;
namespace WechatXiaowei.upmedia
{
class upimage
{
/// <summary>
/// 上传本地图片到微信服务器
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public static result localfile(string filePath)
{
FileStream file = new FileStream(filePath, FileMode.Open);
byte[] bb = new byte[file.Length];
file.Read(bb, 0, (int)file.Length);
file.Close();
string fileName = Path.GetFileName(filePath);
MsMultiPartFormData form = new MsMultiPartFormData();
string decodeName = HttpUtility.UrlDecode(Path.GetFileName(fileName));//最终服务器会按原文件名保存文件,所以需要将文件名编码下,防止中文乱码
string fileKeyName = "media";
form.AddStreamFile(fileKeyName, fileName, bb);
string hashMd5 =HashHelper.ComputeMD5(filePath);
WxPayData inputObj = new WxPayData();
inputObj.SetValue("mch_id", Config.GetMchID);
inputObj.SetValue("media_hash", hashMd5);
inputObj.SetValue("sign_type", "HMAC-SHA256");
//inputObj.SetValue("sign", inputObj.MakeSign());//签名
form.AddFormField("mch_id", Config.GetMchID);
form.AddFormField("media_hash", hashMd5);
form.AddFormField("sign_type", "HMAC-SHA256");
form.AddFormField("sign", inputObj.MakeSign());//签名
//最终接收文件上传的服务接口
string SERVICE_URL = "https://api.mch.weixin.qq.com/secapi/mch/uploadmedia";
string rst = Http.PostWithMsMultiPartFormData(inputObj.ToXml(), SERVICE_URL, form, true, 10);
inputObj = new WxPayData();
inputObj.FromXml(rst);
//返回实体结果
result result = null;
if (inputObj.GetValue("return_code").ToString() == "SUCCESS")
{
result = new Model.upimage.result()
{
code = Result.SUCCESS,
media_id = inputObj.GetValue("media_id").ToString()
};
}
else
{
result = new Model.upimage.result()
{
code = Result.FAIL,
message = inputObj.GetValue("return_msg").ToString()
};
}
return result;
}
}
}
关键:multipart/form-data 格式上传图片 + 签名
参考:https://blog.youkuaiyun.com/pjj802366/article/details/51645150
证书下载
关键1:Authorization加密信息生成
关键2:证书解密《通过以下PHP解决》
敏感信息加密(+证书解密)
参考:https://blog.youkuaiyun.com/u010324331/article/details/81938979
注意:这个功能是通过PHP方式解决加密的问题
使用>Php7.2,开启下libsodium扩展。方法为:在php.ini 增加: extension=php_sodium.dll
$ciphertext = base64_decode($_POST['ciphertext']);
$associated_data= $_POST['associated_data'];
$nonce = $_POST['nonce'];
$aes_key= '自己设定key';
// sodium_crypto_aead_aes256gcm_decrypt >=7.2版本,去php.ini里面开启下libsodium扩展就可以,之前版本需要安装libsodium扩展,
//具体查看php.net(ps.使用这个函数对扩展的版本也有要求哦,扩展版本 >=1.08)
//$b= sodium_crypto_aead_aes256gcm_is_available();
$plaintext = sodium_crypto_aead_aes256gcm_decrypt($ciphertext, $associated_data, $nonce, $aes_key);
//print_r( $plaintext,false );
//敏感信息加密
$string = $_POST['string'];
$publicKeyResource = openssl_get_publickey($plaintext);
$f= openssl_public_encrypt($string, $crypted, $publicKeyResource, OPENSSL_PKCS1_PADDING);
openssl_free_key($publicKeyResource);
if ($f) {
print_r( base64_encode($crypted));
}
?>
身份证识别
腾讯云身份证识别API文档,免费次数:1000次/月
待续20180922
.
.
库源码已放到到GitHub
日期: 2019 02 01不依赖PHP 独立完成加密处理
https://github.com/onsuper/XiaoWei