diff --git a/payapi/build.gradle b/payapi/build.gradle
index 3e5d865..f87ce15 100644
--- a/payapi/build.gradle
+++ b/payapi/build.gradle
@@ -86,7 +86,7 @@
     implementation group: 'javax.servlet', name: 'jstl', version: '1.2'
     implementation group: 'taglibs', name: 'standard', version: '1.1.2'
     implementation group: 'commons-codec', name: 'commons-codec', version: '1.6'
-//    implementation files('libs/ojdbc6.jar')
+    implementation files('libs/sms.jar')
     implementation 'commons-dbcp:commons-dbcp:1.4'
 
     implementation project(':payapi-common')
diff --git a/payapi/libs/sms.jar b/payapi/libs/sms.jar
new file mode 100755
index 0000000..37ff259
--- /dev/null
+++ b/payapi/libs/sms.jar
Binary files differ
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
index 09af455..3d7471c 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.mobile
 
+import com.mascloud.sdkclient.Client
 import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
 import com.supwisdom.dlpay.agent.service.CitizencardPayService
 import com.supwisdom.dlpay.api.bean.JsonResult
@@ -11,6 +12,7 @@
 import com.supwisdom.dlpay.framework.redisrepo.ApiJwtRepository
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.*
+import com.supwisdom.dlpay.framework.util.Dictionary
 import com.supwisdom.dlpay.mobile.domain.TBMobileUser
 import com.supwisdom.dlpay.mobile.service.MobileApiService
 import com.supwisdom.dlpay.system.service.DictionaryProxy
@@ -26,7 +28,7 @@
 import org.springframework.web.bind.annotation.RestController
 import org.springframework.web.bind.annotation.RequestParam
 import java.time.Duration
-import java.util.Calendar
+import java.util.*
 
 
 @RestController
@@ -88,10 +90,12 @@
         val temp = redisTemplate.opsForValue().get(phone)
         if (temp.isNullOrEmpty()) {
             val code = RandomUtils.randomNumber(6)
-            System.out.println(code)
+            val rs = mobileApiService.sendSms(phone,code)
+            if("0"!=rs.retcode){
+                return JsonResult.error(rs.retmsg)
+            }
             redisTemplate.opsForValue().set(phone, code, Duration.ofMinutes(5))
         }
-        //TODO call send code sdk
         return JsonResult.ok("验证码已发送")
     }
 
@@ -256,10 +260,12 @@
         val temp = redisTemplate.opsForValue().get(user.phone)
         if (temp.isNullOrEmpty()) {
             val code = RandomUtils.randomNumber(6)
-            System.out.println(code)
+            val rs = mobileApiService.sendSms(user.phone,code)
+            if("0"!=rs.retcode){
+                return JsonResult.error(rs.retmsg)
+            }
             redisTemplate.opsForValue().set(user.phone, code, Duration.ofMinutes(5))
         }
-        //TODO call send code sdk
         return JsonResult.ok("验证码已发送")
     }
 
@@ -664,7 +670,7 @@
         val p = SecurityContextHolder.getContext().authentication
         mobileApiService.findUserById(p.name)
                 ?: return JsonResult.error("用户不存在，请注册")
-        //TODO cardlost
+        //TODO qrcode
         return JsonResult.ok("ok").put("qrcode",p.name)!!
     }
 
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/MobileApiService.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/MobileApiService.kt
index 6b28b01..5e1ad77 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/MobileApiService.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/MobileApiService.kt
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.mobile.service
 
+import com.supwisdom.dlpay.api.bean.BaseResp
 import com.supwisdom.dlpay.api.domain.TCard
 import com.supwisdom.dlpay.mobile.domain.TBMobileUser
 import com.supwisdom.dlpay.mobile.domain.TBPages
@@ -18,4 +19,6 @@
     fun findCardByUserid(userid :String) :TCard?
 
     fun saveCard(card:TCard):TCard
+
+    fun sendSms(phone:String,code:String):BaseResp
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileApiServiceImpl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileApiServiceImpl.kt
index e7dee86..87ef47b 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileApiServiceImpl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileApiServiceImpl.kt
@@ -1,15 +1,20 @@
 package com.supwisdom.dlpay.mobile.service.impl
 
+import com.mascloud.sdkclient.Client
+import com.supwisdom.dlpay.api.bean.BaseResp
 import com.supwisdom.dlpay.api.dao.CardDao
 import com.supwisdom.dlpay.api.domain.TCard
+import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.mobile.dao.MobileUserDao
 import com.supwisdom.dlpay.mobile.dao.PagesDao
 import com.supwisdom.dlpay.mobile.domain.TBMobileUser
 import com.supwisdom.dlpay.mobile.domain.TBPages
 import com.supwisdom.dlpay.mobile.service.MobileApiService
 import com.supwisdom.dlpay.util.ConstantUtil
+import mu.KotlinLogging
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
+import java.util.*
 
 @Service
 class MobileApiServiceImpl : MobileApiService {
@@ -22,6 +27,11 @@
     @Autowired
     lateinit var pagesDao: PagesDao
 
+    @Autowired
+    lateinit var systemUtilService: SystemUtilService
+
+    val logger = KotlinLogging.logger { }
+
     override fun saveUser(user: TBMobileUser): TBMobileUser {
         return mobileUserDao.save(user)
     }
@@ -53,4 +63,86 @@
     override fun saveCard(card: TCard): TCard {
         return cardDao.save(card)
     }
+
+    override fun sendSms(phone:String,code: String): BaseResp {
+        var resp = BaseResp()
+        var url = systemUtilService.getBusinessValue("sms.url")
+        if(url.isNullOrEmpty()){
+            resp.retcode = "1"
+            resp.retmsg="短信业务参数未配置"
+            logger.error { "短信参数：sms.url 未在业务表中配置" }
+            return resp
+        }
+        var account = systemUtilService.getBusinessValue("sms.account")
+        if(account.isNullOrEmpty()){
+            resp.retcode = "1"
+            resp.retmsg="短信业务参数未配置"
+            logger.error { "短信参数：sms.account 未在业务表中配置" }
+            return resp
+        }
+        var pwd = systemUtilService.getBusinessValue("sms.pwd")
+        if(pwd.isNullOrEmpty()){
+            resp.retcode = "1"
+            resp.retmsg="短信业务参数未配置"
+            logger.error { "短信参数：sms.pwd 未在业务表中配置" }
+            return resp
+        }
+        var ecname = systemUtilService.getBusinessValue("sms.ecname")
+        if(ecname.isNullOrEmpty()){
+            resp.retcode = "1"
+            resp.retmsg="短信业务参数未配置"
+            logger.error { "短信参数：sms.ecname 未在业务表中配置" }
+            return resp
+        }
+        var addserial = systemUtilService.getBusinessValue("sms.addserial")
+        if(pwd.isNullOrEmpty()){
+            resp.retcode = "1"
+            resp.retmsg="短信业务参数未配置"
+            logger.error { "短信参数：sms.addserial 未在业务表中配置" }
+            return resp
+        }
+        var sign = systemUtilService.getBusinessValue("sms.sign")
+        if(sign.isNullOrEmpty()){
+            resp.retcode = "1"
+            resp.retmsg="短信业务参数未配置"
+            logger.error { "短信参数：sms.sign 未在业务表中配置" }
+            return resp
+        }
+        var tempid = systemUtilService.getBusinessValue("sms.tempid")
+        if(tempid.isNullOrEmpty()){
+            resp.retcode = "1"
+            resp.retmsg="短信业务参数未配置"
+            logger.error { "短信参数：sms.tempid 未在业务表中配置" }
+            return resp
+        }
+        var priority = systemUtilService.getBusinessValue("sms.priority")
+        if(priority.isNullOrEmpty()){
+            priority="1"
+        }
+        var client =  Client.getInstance()
+        // 正式环境IP，登录验证URL，用户名，密码，集团客户名称
+        var ret = client.login(url, account, pwd,ecname)
+        if(!ret){
+            logger.error { "无法登陆短信平台，身份验证失" }
+            resp.retcode = "1"
+            resp.retmsg="无法登陆短信平台"
+            return resp
+        }
+        var sendResult = client.sendTSMS (arrayOf(phone),
+                tempid, arrayOf(code),addserial,  priority.toInt(),sign, UUID.randomUUID().toString())
+        System.out.println("推送结果: $sendResult")
+        return if(sendResult==1||sendResult==110){
+            resp.retcode = "0"
+            resp.retmsg="成功"
+            resp
+        }else if(sendResult==104){
+            resp.retcode = "1"
+            resp.retmsg="手机号错误"
+            resp
+        }else{
+            resp.retcode = "1"
+            resp.retmsg="短信发送失败，请稍后再试"
+            resp
+        }
+    }
 }
\ No newline at end of file
