c++ 調用阿里雲短信

在c++ 程序中,有時我們需要根據客戶需求,添加短信提醒/短信驗證等功能,然而,市場上的大部分短信平臺,對c/c++支持都不算友好。

有人,自己用c/c++從頭到尾,自己實現了一套短信的c++ sdk,但是用起來,呵呵。。。

但是我們換個角度想一想,短信平臺提供的SDK 大部分都包含 python,java,go...等等。

1、python 和 java 都是解釋性語言,可以用c++調用python的c庫 和jni,但是這兩種語言用c++調用起來就很繁瑣了,要求稍微有些高,程序做好後,可能出現各種意想不到的錯誤,很可能程序崩潰,所所以pass掉。

2、用 go 版本sdk,就沒有這麼多煩惱。因爲go是編譯型、跨平臺的語言,在各種平臺上都是能以機器碼的形式運行。另外go的模塊,擴展名都爲 .a,與c/c++語言的靜態庫,存在着千絲萬縷的聯繫,我們可以通過go的工具把go程序直接編譯位靜態庫,供給c++調用。

拿阿里雲短信平臺舉例

1、首先安裝go 運行環境

Windows直接下載安裝包

ubuntu 18.04 : sodu apt-get install golang

2、下載依賴包

go get -u github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests

go get -u github.com/aliyun/alibaba-cloud-sdk-go/services/dysmsapi

hello.go代碼類似如下      

package main

import (
	"fmt"
  	"github.com/aliyun/alibaba-cloud-sdk-go/services/dysmsapi"
  	"C"
  
)

func main() {
}

//export SendSms
func SendSms(phoneNumber,params string){

	client, err := dysmsapi.NewClientWithAccessKey("cn-hangzhou", "阿里雲的accessKeyId", "accessKeySecret")
	request := dysmsapi.CreateSendSmsRequest()
	request.Scheme = "https"	
	request.PhoneNumbers = phoneNumber
	request.SignName = "XXXXX"
  	request.TemplateCode = "XXXXX"
  	request.TemplateParam = params
  	response, err := client.SendSms(request)
	if err != nil {
		fmt.Print(err.Error())
	}
	fmt.Printf("response is %#v\n", response)
	

}

3、生成靜態庫

go build -buildmode=c-archive hello.go

執行完畢後就會生成 hello.a 和 hello.h兩個文件,其中hello.a爲靜態庫,hello.h爲c++調用的頭文件。

把這兩個文件添加到c++ 工程,我們就會很愉快的調用函數SendSms了。

#include <QCoreApplication>
#include <hello.h>
#include <string>

void __sendSms(const std::string &phoneNumber,const std::string & params){
    GoString gphone{phoneNumber.c_str() ,static_cast<ptrdiff_t>(phoneNumber.length()) };
    GoString gparams{params.c_str(),static_cast<ptrdiff_t>(params.length())};
    SendSms(gphone,gparams);
}


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    __sendSms("1350000000","{\"name\":\"1357656\",\"place\":\"山東\",\"time\":\"2019-11-20\",\"type\":\"警報\"}");

    return a.exec();
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章