外卖CPS红包小程序源码分享
外卖券外卖省省外卖探探美团饿了么外卖联盟优惠券小程序系统软件开发源码 美团/饿了么外卖CPS联盟返利公众号小程序裂变核心源码
今天和大家分享下外卖CPS项目,这个其实和做淘客有点类似,淘客是别人通过你的推广购物产生佣金,同理外卖CPS也就是别人通过你的推广点了外卖产生佣金,和做淘客一个原理
饿了么、美团优惠开发(外卖cps,三级裂变源码)
源码搭建
http://mtw.so/6wav8W
截图
步骤
下载以上源代码到本地http://mtw.so/6wav8W
修改为你自己的微信小程序,打开 /dist/pages/ele/index.js微信小程序->开发管理->开发设置 添加 request的域名: 地址:
https://mp./wxamp/devprofile/get_profile?token=271531762&lang=zh_CN
小程序管理后台配置你的链接
后台地址: 进去之后选择小程序管理->无裂变小程序管理->添加小程序->填入你自己的链接
微信开发者工具,导入项目,提交审核
没用的代码
package com.github.kr328.clash.service
import android.content.Context
import .Uri
import com.github.mon.log.Log
import com.github.kr328.clash.core.Clash
import com.github.kr328.clash.service.data.Imported
import com.github.kr328.clash.service.data.ImportedDao
import com.github.kr328.clash.service.data.Pending
import com.github.kr328.clash.service.data.PendingDao
import com.github.kr328.clash.service.model.Profile
import com.github.kr328.clash.service.remote.IFetchObserver
import com.github.kr328.clash.service.store.ServiceStore
import com.github.kr328.clash.service.util.importedDir
import com.github.kr328.clash.service.util.pendingDir
import com.github.kr328.clash.service.util.processingDir
import com.github.kr328.clash.service.util.sendProfileChanged
import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withContext
import java.util.*
import java.util.concurrent.TimeUnit
object ProfileProcessor {
private val profileLock = Mutex()
private val processLock = Mutex()
suspend fun apply(context: Context, uuid: UUID, callback: IFetchObserver? = null) {withContext(NonCancellable) {processLock.withLock {val snapshot = profileLock.withLock {val pending = PendingDao().queryByUUID(uuid)?: throw IllegalArgumentException("profile $uuid not found")pending.enforceFieldValid()context.processingDir.deleteRecursively()context.processingDir.mkdirs()context.pendingDir.resolve(pending.uuid.toString()).copyRecursively(context.processingDir, overwrite = true)pending}val force = snapshot.type != Profile.Type.Filevar cb = callbackClash.fetchAndValid(context.processingDir, snapshot.source, force) {try {cb?.updateStatus(it)} catch (e: Exception) {cb = nullLog.w("Report fetch status: $e", e)}}.await()propackage com.github.kr328.clash.service
import android.content.Context
import .Uri
import com.github.mon.log.Log
import com.github.kr328.clash.core.Clash
import com.github.kr328.clash.service.data.Imported
import com.github.kr328.clash.service.data.ImportedDao
import com.github.kr328.clash.service.data.Pending
import com.github.kr328.clash.service.data.PendingDao
import com.github.kr328.clash.service.model.Profile
import com.github.kr328.clash.service.remote.IFetchObserver
import com.github.kr328.clash.service.store.ServiceStore
import com.github.kr328.clash.service.util.importedDir
import com.github.kr328.clash.service.util.pendingDir
import com.github.kr328.clash.service.util.processingDir
import com.github.kr328.clash.service.util.sendProfileChanged
import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withContext
import java.util.*
import java.util.concurrent.TimeUnit
object ProfileProcessor {
private val profileLock = Mutex()
private val processLock = Mutex()
suspend fun apply(context: Context, uuid: UUID, callback: IFetchObserver? = null) {withContext(NonCancellable) {processLock.withLock {val snapshot = profileLock.withLock {val pending = PendingDao().queryByUUID(uuid)?: throw IllegalArgumentException("profile $uuid not found")pending.enforceFieldValid()context.processingDir.deleteRecursively()context.processingDir.mkdirs()context.pendingDir.resolve(pending.uuid.toString()).copyRecursively(context.processingDir, overwrite = true)pending}val force = snapshot.type != Profile.Type.Filevar cb = callbackClash.fetchAndValid(context.processingDir, snapshot.source, force) {try {cb?.updateStatus(it)} catch (e: Exception) {cb = nullLog.w("Report fetch status: $e", e)}}.await()profileLock.withLock {if (PendingDao().queryByUUID(snapshot.uuid) == snapshot) {context.importedDir.resolve(snapshot.uuid.toString()).deleteRecursively()context.processingDir.copyRecursively(context.importedDir.resolve(snapshot.uuid.toString()))val old = ImportedDao().queryByUUID(snapshot.uuid)val new = Imported(snapshot.uuid,snapshot.name,snapshot.type,snapshot.source,snapshot.interval,old?.createdAt ?: System.currentTimeMillis())if (old != null) {ImportedDao().update(new)} else {ImportedDao().insert(new)}PendingDao().remove(snapshot.uuid)context.pendingDir.resolve(snapshot.uuid.toString()).deleteRecursively()context.sendProfileChanged(snapshot.uuid)}}}}}suspend fun update(context: Context, uuid: UUID, callback: IFetchObserver?) {withContext(NonCancellable) {processLock.withLock {val snapshot = profileLock.withLock {val imported = ImportedDao().queryByUUID(uuid)?: throw IllegalArgumentException("profile $uuid not found")context.processingDir.deleteRecursively()context.processingDir.mkdirs()context.importedDir.resolve(imported.uuid.toString()).copyRecursively(context.processingDir, overwrite = true)imported}var cb = callbackClash.fetchAndValid(context.processingDir, snapshot.source, true) {try {cb?.updateStatus(it)} catch (e: Exception) {cb = nullLog.w("Report fetch status: $e", e)}}.await()profileLock.withLock {if (ImportedDao().exists(snapshot.uuid)) {context.importedDir.resolve(snapshot.uuid.toString()).deleteRecursively()context.processingDir.copyRecursively(context.importedDir.resolve(snapshot.uuid.toString()))context.sendProfileChanged(snapshot.uuid)}}}}}suspend fun delete(context: Context, uuid: UUID) {withContext(NonCancellable) {profileLock.withLock {ImportedDao().remove(uuid)PendingDao().remove(uuid)val pending = context.pendingDir.resolve(uuid.toString())val imported = context.importedDir.resolve(uuid.toString())pending.deleteRecursively()imported.deleteRecursively()context.sendProfileChanged(uuid)}}}suspend fun release(context: Context, uuid: UUID): Boolean {return withContext(NonCancellable) {profileLock.withLock {PendingDao().remove(uuid)context.pendingDir.resolve(uuid.toString()).deleteRecursively()}}}suspend fun active(context: Context, uuid: UUID) {withContext(NonCancellable) {profileLock.withLock {if (ImportedDao().exists(uuid)) {val store = ServiceStore(context)store.activeProfile = uuidcontext.sendProfileChanged(uuid)}}}}private fun Pending.enforceFieldValid() {val scheme = Uri.parse(source)?.scheme?.lowercase(Locale.getDefault())when {name.isBlank() ->throw IllegalArgumentException("Empty name")source.isEmpty() && type != Profile.Type.File ->throw IllegalArgumentException("Invalid url")source.isNotEmpty() && scheme != "https" && scheme != "http" && scheme != "content" ->throw IllegalArgumentException("Unsupported url $source")interval != 0L && TimeUnit.MILLISECONDS.toMinutes(interval) < 15 ->throw IllegalArgumentException("Invalid interval")}}
}fileLock.withLock {
if (PendingDao().queryByUUID(snapshot.uuid) == snapshot) {
context.importedDir.resolve(snapshot.uuid.toString())
.deleteRecursively()
context.processingDir
.copyRecursively(context.importedDir.resolve(snapshot.uuid.toString()))
val old = ImportedDao().queryByUUID(snapshot.uuid)val new = Imported(snapshot.uuid,snapshot.name,snapshot.type,snapshot.source,snapshot.interval,old?.createdAt ?: System.currentTimeMillis())if (old != null) {ImportedDao().update(new)} else {ImportedDao().insert(new)}PendingDao().remove(snapshot.uuid)context.pendingDir.resolve(snapshot.uuid.toString()).deleteRecursively()context.sendProfileChanged(snapshot.uuid)}}}}}suspend fun update(context: Context, uuid: UUID, callback: IFetchObserver?) {withContext(NonCancellable) {processLock.withLock {val snapshot = profileLock.withLock {val imported = ImportedDao().queryByUUID(uuid)?: throw IllegalArgumentException("profile $uuid not found")context.processingDir.deleteRecursively()context.processingDir.mkdirs()context.importedDir.resolve(imported.uuid.toString()).copyRecursively(context.processingDir, overwrite = true)imported}var cb = callbackClash.fetchAndValid(context.processingDir, snapshot.source, true) {try {cb?.updateStatus(it)} catch (e: Exception) {cb = nullLog.w("Report fetch status: $e", e)}}.awaitpackage com.github.kr328.clash.service
import android.content.Context
import .Uri
import com.github.mon.log.Log
import com.github.kr328.clash.core.Clash
import com.github.kr328.clash.service.data.Imported
import com.github.kr328.clash.service.data.ImportedDao
import com.github.kr328.clash.service.data.Pending
import com.github.kr328.clash.service.data.PendingDao
import com.github.kr328.clash.service.model.Profile
import com.github.kr328.clash.service.remote.IFetchObserver
import com.github.kr328.clash.service.store.ServiceStore
import com.github.kr328.clash.service.util.importedDir
import com.github.kr328.clash.service.util.pendingDir
import com.github.kr328.clash.service.util.processingDir
import com.github.kr328.clash.service.util.sendProfileChanged
import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withContext
import java.util.*
import java.util.concurrent.TimeUnit
object ProfileProcessor {
private val profileLock = Mutex()
private val processLock = Mutex()
suspend fun apply(context: Context, uuid: UUID, callback: IFetchObserver? = null) {withContext(NonCancellable) {processLock.withLock {val snapshot = profileLock.withLock {val pending = PendingDao().queryByUUID(uuid)?: throw IllegalArgumentException("profile $uuid not found")pending.enforceFieldValid()context.processingDir.deleteRecursively()context.processingDir.mkdirs()context.pendingDir.resolve(pending.uuid.toString()).copyRecursively(context.processingDir, overwrite = true)pending}val force = snapshot.type != Profile.Type.Filevar cb = callbackClash.fetchAndValid(context.processingDir, snapshot.source, force) {try {cb?.updateStatus(it)} catch (e: Exception) {cb = nullLog.w("Report fetch status: $e", e)}}.await()profileLock.withLock {if (PendingDao().queryByUUID(snapshot.uuid) == snapshot) {context.importedDir.resolve(snapshot.uuid.toString()).deleteRecursively()context.processingDir.copyRecursively(context.importedDir.resolve(snapshot.uuid.toString()))val old = ImportedDao().queryByUUID(snapshot.uuid)val new = Imported(snapshot.uuid,snapshot.name,snapshot.type,snapshot.source,snapshot.interval,old?.createdAt ?: System.currentTimeMillis())if (old != null) {ImportedDao().update(new)} else {ImportedDao().insert(new)}PendingDao().remove(snapshot.uuid)context.pendingDir.resolve(snapshot.uuid.toString()).deleteRecursively()context.sendProfileChanged(snapshot.uuid)}}}}}suspend fun update(context: Context, uuid: UUID, callback: IFetchObserver?) {withContext(NonCancellable) {processLock.withLock {val snapshot = profileLock.withLock {val imported = ImportedDao().queryByUUID(uuid)?: throw IllegalArgumentException("profile $uuid not found")context.processingDir.deleteRecursively()context.processingDir.mkdirs()context.importedDir.resolve(imported.uuid.toString()).copyRecursively(context.processingDir, overwrite = true)imported}var cb = callbackClash.fetchAndValid(context.processingDir, snapshot.source, true) {try {cb?.updateStatus(it)} catch (e: Exception) {cb = nullLog.w("Report fetch status: $e", e)}}.await()profileLock.withLock {if (ImportedDao().exists(snapshot.uuid)) {context.importedDir.resolve(snapshot.uuid.toString()).deleteRecursively()context.processingDir.copyRecursively(context.importedDir.resolve(snapshot.uuid.toString()))context.sendProfileChanged(snapshot.uuid)}}}}}suspend fun delete(context: Context, uuid: UUID) {withContext(NonCancellable) {profileLock.withLock {ImportedDao().remove(uuid)PendingDao().remove(uuid)val pending = context.pendingDir.resolve(uuid.toString())val imported = context.importedDir.resolve(uuid.toString())pending.deleteRecursively()imported.deleteRecursively()context.sendProfileChanged(uuid)}}}suspend fun release(context: Context, uuid: UUID): Boolean {return withContext(NonCancellable) {profileLock.withLock {PendingDao().remove(uuid)context.pendingDir.resolve(uuid.toString()).deleteRecursively()}}}suspend fun active(context: Context, uuid: UUID) {withContext(NonCancellable) {profileLock.withLock {if (ImportedDao().exists(uuid)) {val store = ServiceStore(context)store.activeProfile = uuidcontext.sendProfileChanged(uuid)}}}}private fun Pending.enforceFieldValid() {val scheme = Uri.parse(source)?.scheme?.lowercase(Locale.getDefault())when {name.isBlank() ->throw IllegalArgumentException("Empty name")source.isEmpty() && type != Profile.Type.File ->throw IllegalArgumentException("Invalid url")source.isNotEmpty() && scheme != "https" && scheme != "http" && scheme != "content" ->throw IllegalArgumentException("Unsupported url $source")interval != 0L && TimeUnit.MILLISECONDS.toMinutes(interval) < 15 ->throw IllegalArgumentException("Invalid interval")}}
}()
profileLock.withLock {if (ImportedDao().exists(snapshot.uuid)) {context.importedDir.resolve(snapshot.uuid.toString()).deleteRecursively()context.processingDir.copyRecursively(context.importedDir.resolve(snapshot.uuid.toString()))context.sendProfileChanged(snapshot.uuid)}}}}}suspend fun delete(context: Context, uuid: UUID) {withContext(NonCancellable) {profileLock.withLock {ImportedDao().remove(uuid)PendingDao().remove(uuid)val pending = context.pendingDir.resolve(uuid.toString())val imported = context.importedDir.resolve(uuid.toString())pending.deleteRecursively()imported.deleteRecursively()context.sendProfileChanged(uuid)}}}suspend fun release(context: Context, uuid: UUID): Boolean {return withContext(NonCancellable) {profileLock.withLock {PendingDao().remove(uuid)context.pendingDir.resolve(uuid.toString()).deleteRecursively()}}}suspend fun active(context: Context, uuid: UUID) {withContext(NonCancellable) {profileLock.withLock {if (ImportedDao().exists(uuid)) {val store = ServiceStore(context)store.activeProfile = uuidcontext.sendProfileChanged(uuid)}}}}private fun Pending.enforceFieldValid() {val scheme = Uri.parse(source)?.scheme?.lowercase(Locale.getDefault())when {name.isBlank() ->throw IllegalArgumentException("Empty name")source.isEmpty() && type != Profile.Type.File ->throw IllegalArgumentException("Invalid url")source.isNotEmpty() && scheme != "https" && scheme != "http" && scheme != 在我还是个比较白的小白的时候,我在网上花了三个月的时间下载了200G的网赚视频教程之后,我发现一个问题,网赚圈的资源十分的匮乏,因为我苦等了三个月,居然没有找到一个我心目中所希望的项目。
几乎所有的网赚新手包括我在内,在最初接触网赚项目的时候,一是看简单不简单,二是看赚钱不赚钱,毕竟大家都觉得网赚有钱捡,很好赚。就像所有淘二手手机的人,都希望拿二手的价格买到99%新的二手机子。
这样的落差之下,人的心理变化,就成了一件有利可图的事情。所有人都知道,赚钱肯定没有那么简单。但所有人都希望,这样的好事落在我们的头上,特别是当别人信誓旦旦的时候。新手们的心理就像买二手的人一样,希望可以得到一个简单还赚钱的项目。
在苦等三个月之后,看了无数的项目和课程之后,我在想:究竟是因为网赚圈网赚项目的匮乏,导致我找不到我心仪的项目。还是因为根本就不存在这样的项目?亦或这样的项目是有的,但是我没有资源,这样的项目根本轮不到我头上?“content” ->
throw IllegalArgumentException(“Unsupported url $source”)
interval != 0L && TimeUnit.MILLISECONDS.toMinutes(interval) < 15 ->
throw IllegalArgumentException(“Invalid interval”)
}
}
}但明明网赚圈的大佬们,老师们,都异口同声的说有这样的项目,简单,新手,就可以日赚一千几百。大家是为什么都这样异口同声呢?究竟是什么蒙蔽了我的双眼,让我苦苦找寻了三个月,看了三个月的课程一无所获?
我细思极恐。
我恐的是这样的环境,大家究竟为了什么,而一直让我看不清前方的路。为什么集体来骗我?
我想了很久,听了很多歌,我听着《林中鸟》,想着《肖申克的救赎》,想着安迪在最后时刻驾驶这那跑车在海边驰骋,我想到了《楚门的世界》,想到了整个世界在欺骗他,我想着这和我何其相似。
我继续在项目的海洋中寻觅,而这次,我并不是在找项目,我在找《答案》。我在想,究竟是什么挡住我前进的步伐。
在这当中,我看到了一件有趣的事情。图是随便截图的,打个比喻。